动态生成代理实现类:
1 2 3 4 5 6 7 8 9
| SqlSession session = MyBatisUtil.getSession(); assert session != null;
StudentDao dao = session.getMapper(StudentDao.class);
List<Student> list = dao.getAllStudent();
list.forEach(System.out::println);
|
sqlSession对象可以使用getMapper方法,传入接口的class参数,使用映射动态的生成实现类。
(PS:DML操作是基于数据库事务进行的,所以需要提交commit,建议直接修改工具类)
1:配置文件需要映射加载接口的实现xml
1 2 3 4
| <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"> <id column="id" property="gid"></id> <result column="name" property="gname"></result> </resultMap>
|
有两个参数同样需要注意:
column:列
property:属性
将SQL语句查询的结果的列,转化为对应的属性,如果两者名称不同的话。
result表示普通的结果,id表示为主键列,仅此而已。