基于代理 Dao 实现 CRUD 操作
1、查询所有
mapper配置文件:
select * from user;
测试类: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配置文件:
select * from user where id = #{uid}
测试类:User user =userDao.findOne(1);
6、模糊查询
方式1
mapper配置文件:
select * from user where username like #{username}
测试类:List users =userDao.findByName("%王%");
我们在配置文件中没有加入%来作为模糊查询的条件,所以在传入字符串实参时,就需要给定模糊查询的标识%,配置文件中的#{username}也只是一个占位符,所以 SQL 语句为: select * from user where username like ?
方式2
mapper配置文件:
select * from user where username like '%${value}%'
测试类:List
将原来的#{}占位符改成了${value},注意如果用模糊查询的这种写法,那么${value}的写法就是固定的,不能写成其它名字,执行的语句为:select * from user where username like '%王%'
区别
#{}表示一个占位符号
通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类型值,#{}括号中可以是 value 或其它名称。
${}表示拼接 sql 串
通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, ${}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,${}括号中只能是 value。
7、使用聚合函数查询
mapper配置文件:
select count(id) from user
测试类: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属性,如:
select * from user
Mybatis 传统 DAO 层开发(了解)
通过dao实现类进行mybatis的开发
private SqlSession sqlSession;
public UserDaoImpl(SqlSession sqlSession){
this.sqlSession = sqlSession;
}
@Override
public List
List
return list;
}