首页 > 其他分享 >Mybatis的应用

Mybatis的应用

时间:2022-10-27 22:58:38浏览次数:53  
标签:xml 创建 sqlSession SqlSession user 应用 sql Mybatis

一、导入jar包。

 

 二、加入配置文件。

1、在config下创建log4j.properties如下:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2、在config下创建SqlMapConfig.xml,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
</configuration>

 

三、根据表结构创建pojo类。pojo类作为mybatis进行sql映射使用,po类通常与数据库表对应。

1、数据库user表如下图:

 

2、User.java如下:  

Public class User {
    private int id;
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址
get/set…

 

四、创建sql映射文件,在config下的sqlmap目录下创建sql映射文件User.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,用于隔离sql -->
<mapper namespace="test">
</mapper>

 

 五、加载映射文件。mybatis框架需要加载Mapper.xml映射文件,将users.xml添加在SqlMapConfig.xml,如下:

 

 六、实现根据id查询用户的功能。

1、原生sql:select * from `user` where id=1

2、在user.xml映射文件中编写按id查询用户的功能。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,用于隔离sql -->
<mapper namespace="test">

    <!-- id:statement的id 或者叫做sql的id-->
    <!-- parameterType:声明输入参数的类型 -->
    <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
    <!-- #{}:输入参数的占位符,相当于jdbc的? -->
    <select id="queryUserById" parameterType="int"
        resultType="cn.itcast.mybatis.pojo.User">
        SELECT * FROM `user` WHERE id  = #{id}
    </select>
</mapper>

 

3、测试程序。创建一个Test类,编写实现方法。

(1). 创建SqlSessionFactoryBuilder对象

 (2). 加载SqlMapConfig.xml配置文件

 (3). 创建SqlSessionFactory对象

 (4). 创建SqlSession对象

 (5). 执行SqlSession对象执行查询,获取结果User

 (6). 打印结果

 (7). 释放资源

public class MybatisTest {
    private SqlSessionFactory sqlSessionFactory = null;

    @Before
    public void init() throws Exception {
        // 1. 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        // 2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");

        // 3. 创建SqlSessionFactory对象
        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    }

    @Test
    public void testQueryUserById() throws Exception {
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 5. 执行SqlSession对象执行查询,获取结果User
        // 第一个参数是User.xml的statement的id,第二个参数是执行sql需要的参数;
        Object user = sqlSession.selectOne("queryUserById", 1);

        // 6. 打印结果
        System.out.println(user);

        // 7. 释放资源
        sqlSession.close();
    }
}

 

七、模糊查询。

1、原生sql:select * from `user` where username like '%陈%'

2、方法一:user.xml配置文件如下

<!-- 如果返回多个结果,mybatis会自动把返回的结果放在list容器中 -->
    <!-- resultType的配置和返回一个结果的配置一样 -->
    <select id="queryUserByUsername1" parameterType="string"
        resultType="cn.itcast.mybatis.pojo.User">
        SELECT * FROM `user` WHERE username LIKE #{username}
    </select>

2.1、测试程序:

@Test
    public void testQueryUserByUsername1() throws Exception {
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 5. 执行SqlSession对象执行查询,获取结果User
        // 查询多条数据使用selectList方法
        List<Object> list = sqlSession.selectList("queryUserByUsername1", "%陈%");

        // 6. 打印结果
        for (Object user : list) {
            System.out.println(user);
        }

        // 7. 释放资源
        sqlSession.close();
    }

3、方法二:user.xml配置文件如下

<!-- 如果传入的参数是简单数据类型,${}里面必须写value -->
    <select id="queryUserByUsername2" parameterType="string"
        resultType="cn.itcast.mybatis.pojo.User">
        SELECT * FROM `user` WHERE username LIKE '%${value}%'
    </select>

3.1、测试程序:

@Test
public void testQueryUserByUsername2() throws Exception {
    // 4. 创建SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    // 5. 执行SqlSession对象执行查询,获取结果User
    // 查询多条数据使用selectList方法
    List<Object> list = sqlSession.selectList("queryUserByUsername2", "王");

    // 6. 打印结果
    for (Object user : list) {
        System.out.println(user);
    }

    // 7. 释放资源
    sqlSession.close();
}

 

八、总结:

1、#{} 和 ${}的区别。

#{} :(1)可将java类型自动转换为jdbc类型。

    #{}表示一个占位符,可通过#{} 实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。

  (2)能够有效防止sql注入。

  (3)若传输单个简单类型值,#{} 括号中可以是任意值。

${} :(1)不能自动转换。${}表示sql的拼接串,通过${}可将parameterType拼接到sql中,但不进行自动转换。

  (2)不能防止sql注入。

  (3)若传输单个简单类型值,${} 括号中只能是value。

2、parameterType和resultType。

parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。

resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中。

3、selectOne和selectList。

selectOne只能查询一条数据,否则抛出异常。

selectList可以查询一条或多条数据。

标签:xml,创建,sqlSession,SqlSession,user,应用,sql,Mybatis
From: https://www.cnblogs.com/sfwu/p/16834310.html

相关文章

  • debian如何删除无效的应用图标
    1.看/usr/share/applications下是否有xxx.desktop2.可以到~/.local/share/applications下看是否有xxx.desktop来源:https://blog.csdn.net/wzywdj/article/details/7859681......
  • 【学习笔记】Mybatis配置优化
    Mybatis配置优化1.核心配置文件结构核心配置文件:mybatis-config.xml官方建议起这个名字,但我们可以随意起名configuration(配置)properties(属性)settings(设置)ty......
  • MybatisPlus实现逻辑删除
    逻辑删除:在表中设计一个标志位,约定0表示删除,1表示存在实现办法1.在表中添加标志位2.在该表对应的实体类中的属性上面,加上注解@TbaleLogic该注解默认0......
  • Qt编写的视频播放综合应用示例(qmedia/ffmpeg/vlc/mpv/海康sdk等)
    一、功能特点1.1基础功能支持各种音频视频文件格式,比如mp3、wav、mp4、asf、rm、rmvb、mkv等。支持本地摄像头设备,可指定分辨率、帧率。支持各种视频流格式,比如rtp、......
  • CSS3关于背景图片应用的总结
    背景的基本属性background-color(背景颜色)background-image(背景图片)background-repeat(背景图片展示的方式)background-attachment(背景图片滚动还是固定)background-po......
  • 常用字符串函数的应用
    常用字符串函数包括:gets()  puts()  strlen()  strcat()   strcmp()   strcpy()​程序代码#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#......
  • 百度应用市场 app 认领
    jarsigner-verbose-keystoreE:\test\aaa.jks-signedjarE:\test1\Baidu_Claim_unsigned.apkE:\test\Baidu_Claim_unsigned.apksan123备注:为签名文件 E:\test......
  • 在 Kubernetes 集群中部署现代应用的通用模式
    在Kubernetes集群中部署现代应用的通用模式摘要我们正在经历现代应用交付领域的第二次浪潮,而Kubernetes和容器化则是这次浪潮的主要推动力量。随着第二次浪潮的推进,......
  • Go 云原生实战:如何增加 Web 应用配置模块
    1介绍当我们为自己编写程序时,通常会将一些重要的配置项直接写在源代码里,比如:服务器监听的端口、数据库使用的名称和端口号、HTTP请求超时的持续时间...但是,如果我们尝试将......
  • 在一个项目中同时实现“后台管理系统”和“前台应用”
    微信一起点菜一个月紧张而愉快的开发又过去了。在这个月,开发了一个微信一起点菜项目,用来再次验证CabloyJS全栈框架定制开发的灵活性和扩展性。实践再次证明,使用CabloyJS全......