0%

mybatis2增删改查

动态生成代理实现类:

1
2
3
4
5
6
7
8
9
//1:用工具类获取一个sqlSession对象
SqlSession session = MyBatisUtil.getSession();
assert session != null;//断言,防止空指针异常
//2:使用sqlSession对象动态获取实现类
StudentDao dao = session.getMapper(StudentDao.class);
//3:调用方法,返回结果
List<Student> list = dao.getAllStudent();
//4:遍历结果
list.forEach(System.out::println);

sqlSession对象可以使用getMapper方法,传入接口的class参数,使用映射动态的生成实现类。
(PS:DML操作是基于数据库事务进行的,所以需要提交commit,建议直接修改工具类)

1:配置文件需要映射加载接口的实现xml

1
2
3
4
<!-- 加载sql映射文件-->
<mappers>
<mapper resource="cn/k2502/dao/StudentDaoMapper.xml"/>
</mappers>

2:接口的实现xml的命名空间需要与接口限定名相同

1
2
3
4
5
<?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">
<mapper namespace="cn.k2502.dao.StudentDao">
</mapper>

写持久化SQL需要注意的地方

1
2
3
 <select id="getStudentById" parameterType="integer" resultType="cn.k2502.domain.Student">
select * from student where xh=#{xh}
</select>

有两个参数:
parameterType:参数类型
resultType:结果类型
这两个参数都要遵循包名.类名的写法,但是对于常用的类型,这样也太过麻烦。
比如Integer的类型为:java.lang.Integer
简化后可以写作:int 或者是 Integer (单词不区分大小写)
凡是包装类都可以用Java本身的写法,不会出现任何问题。
如果要使用基本类型,如 int则需要 _int,加上下换线即可。

当然也可以自定义返回的结果集合:

resultMap:结果集合
这里需要传入自定义集合的id(唯一标识符),自定义集合操作如下:

1
2
3
4
5
<resultMap id="result1" type="cn.k2502.domain.Grade">
<!--<result column="列名" property="属性名"></result>-->
<id column="id" property="gid"></id>
<result column="name" property="gname"></result>
</resultMap>

有两个参数同样需要注意:
column:列
property:属性
将SQL语句查询的结果的列,转化为对应的属性,如果两者名称不同的话。
result表示普通的结果,id表示为主键列,仅此而已。