Mybatis框架(2)

基于代理 Dao 实现 CRUD 操作

1、查询所有

mapper配置文件:

测试类:List users =userDao.findAll();

2、新增

mapper配置文件:

   

        select last_insert_id()

   

    insert into user(username, birthday, sex, address) values (#{username}, #{birthday}, #{sex}, #{address})

测试类:userDao.saveUser(user);

3、修改

mapper配置文件:

    update user set username = #{username}, birthday=#{birthday}, sex=#{sex}, address=#{address} where id=#{id}

测试类:userDao.updateUser(user);

4、删除

mapper配置文件:

    delete from user where id=#{uid}

测试类:userDao.deleteUser(1);

5、查找一个

mapper配置文件:

测试类:User user =userDao.findOne(1);

6、模糊查询

方式1

mapper配置文件:

测试类:List users =userDao.findByName("%王%");

我们在配置文件中没有加入%来作为模糊查询的条件,所以在传入字符串实参时,就需要给定模糊查询的标识%,配置文件中的#{username}也只是一个占位符,所以 SQL 语句为: select * from user where username like ?

方式2

mapper配置文件:

测试类:List users = userDao.findByName("王");

将原来的#{}占位符改成了${value},注意如果用模糊查询的这种写法,那么${value}的写法就是固定的,不能写成其它名字,执行的语句为:select * from user where username like '%王%'

区别

#{}表示一个占位符号

通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类型值,#{}括号中可以是 value 或其它名称。

${}表示拼接 sql 串

通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, ${}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,${}括号中只能是 value。

7、使用聚合函数查询

mapper配置文件:

测试类:Integer count =userDao.findCount();

8、补充

当进行数据库操作后除去释放资源外,还应进行事务的提交,即:sqlSession.commit();

因为mybatis默认是不进行事务提交,可以在初始化时,设置为默认提交:factory.openSession(true);

Mybatis 的参数深入

1、Mybatis的参数

参数parameterType输入类型,有以下几种类型:

1)简单数据类型:如String、Integer等,不区分大小写

2)传递pojo对象:就是我们常用的javabean(实体类对象),Mybatis使用ognl表达式解析对象的值,#{}或${}括号中的值为pojo属性名称

    ognl表达式:Object Graphic Navigation Language 对象 图 导航 语言

    通过对象的取值方法来获取数据,在写法上省略get

    如获取用户名称,在类中:user.getUserName();,在ognl表达式中:user.username

    在parameterType中已经指定属性所属的类,所以在使用时不需要写对象名,如:#{username}

3)传递pojo包装对象:开发中通过 pojo 传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件,这时可以使用包装对象传递输入参数,即:Pojo 类中包含 pojo。

注意:在使用包装对象时,参数parameterType类型为QueryVo,其中包含User对象属性,User对象包含username属性,使用格式为:#{user.username}

2、Mybatis的输出结果封装

输出结果类型包括:

1)简单数据类型,如:Integer

2)Pojo对象:如实体对象(查询一个)

3)Pojo列表:如实体列表(查询所有)

要求:数据库字段名与实体类字段名一致,如果不一致可以通过以下两种方式解决:

1)查询语句中将返回数据结果起别名(执行效率更快,但是每条语句都要修改)

2)使用resultMap来进行匹配(开发效率变快,但是要解析xml)

3、resultMap结果类型

定义resultMap标签:

   

   

   

   

   

   

   

使用:

在返回查询结果时,不再使用resultType定义的全限定类名,而是使用resultMap属性,如:

Mybatis 传统 DAO 层开发(了解)

通过dao实现类进行mybatis的开发

private SqlSession sqlSession;

public UserDaoImpl(SqlSession sqlSession){

    this.sqlSession = sqlSession;

}

@Override

public List findAll() {

    List list = sqlSession.selectList("q.perter.dao.IUserDao.findAll"); //这里的statement为map的key,即:namespace+id(方法名)

    return list;

}

Mybatis调用过程(了解)


通过dao实现Mybatis的调用过程


通过代理的实现Mybatis的过程

你可能感兴趣的:(Mybatis框架(2))