mybatis(6)---mapper动态代理方式

来源:互联网 发布:access2000数据库修复 编辑:程序博客网 时间:2024/06/12 01:37

mapper动态代理实现原理:

mapper接口开发方式只需要程序员编写mapper接口(相当于dao层接口)

mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法同dao接口实现类方法。


mapper接口开发需要遵循以下规范:

1)、mapper.xml文件中的namespace和mapper接口的类路径相同,即namespace设置为接口的类路径

2)、mapper接口中的方法名称应该与mapper.xml中的id名称相同,即接口中的方法名和映射文件中的id名称相同

3)、mapper接口中的方法中的参数类型应该与mapper.xml中的每个sql的paramterType的类型相同

4)、mapper接口中的方法中的结果类型和mapper.xml中的每个sql的resultType的类型相同


操作步骤如下:

1、新建项目mybatisDemo,并导入所需要的jar包




2、在src下新建mybatis的核心配置文件mybatis.cfg.xml

2.1、新建数据库配置db.properites

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8user=rootpassword=root
2.2、mybatis.cfg.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>    <!-- 1、引入db.properties配置文件 -->    <properties resource="db.properties" />  <!-- 2、设置别名 --> <typeAliases> <package name="com.cn.vo" /> </typeAliases>  <!--  development为开发模式 work为工作模式  -->     <environments default="development">         <environment id="development">             <transactionManager type="JDBC" />             <!-- 配置数据库连接信息 -->             <dataSource type="POOLED">                 <property name="driver" value="${driver}" />                 <property name="url" value="${url}" />                 <property name="username" value="${user}" />                 <property name="password" value="${password}" />             </dataSource>         </environment>          </environments>     </configuration>

3、创建数据库




4、在src下新建数据库表t_student所对应的实体类StudentVO

package com.cn.vo;/** * 学生实体类 * */public class StudentVO {private int stuId;           //学生idprivate String stuName;      //学生姓名private String sex;          //学生性别public int getStuId() {return stuId;}public void setStuId(int stuId) {this.stuId = stuId;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "StudentVO [stuId=" + stuId + ", stuName=" + stuName + ", sex="+ sex + "]";}}
注:上面的实体类字段取名会存在一个隐患问题,不知发现没有,数据库字段stu_id对应实体类字段stuId,stu_name对应stuName,sex对应sex

数据库表字段名和实体类字段名不一致解决问题:


5、在src下新建包名com.cn.mapper,然后在包下新建实体类映射文件 StudentMapper.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"> <mapper namespace="com.cn.dao.StudentDao"> <!-- 1.根据id查询学生信息 --> <select id="selectStudentById" parameterType="int" resultType="StudentVO"> select t.stu_id as stuId,    t.stu_name as stuName,    t.sex as sex  from t_student t where t.stu_id=#{stuId}  </select>  <!-- 2、通过学生姓名查询用户 --> <select id="selectStudentByName" parameterType="java.lang.String" resultType="StudentVO"> select t.* from t_student t  where t.stu_name like '%${stuName}%'  </select>  <!-- 3、新增用户 --> <insert id="insertUser" parameterType="StudentVO"> <selectKey keyProperty="stuId" order="AFTER" resultType="java.lang.Integer">
<!-- mysql数据库需要设置主键自增 --> select LAST_INSERT_ID() </selectKey> insert into t_student( stu_name, sex )values( #{stuName}, #{sex} ) </insert>  </mapper>

6、在src新建包com.cn.dao,然后新建接口类StudentDao(注意:和StudentMapper.xml文件中的<mapper>标签对的namespace属性值相同)

package com.cn.dao;import com.cn.vo.StudentVO;public interface StudentMapper {//根据学生id查询学生信息public StudentVO selectStudentById(int stuId);//根据学生名称查询学生信息public StudentVO selectStudentByName(String stuName);//新增用户public void insertUser(StudentVO studentVO);}

7、在mybatis.cfg.xml中注册映射文件StudentMapper.xml

 <!-- 注册UserMapper.xml文件 -->     <mappers>   <mapper resource="com/cn/mapper/StudentMapper.xml" />     </mappers>


8、测试

1、新增Student测试代码如下

package com.cn.test1;import org.apache.ibatis.session.SqlSession;import com.cn.dao.StudentDao;import com.cn.utils.MybatisUtil;import com.cn.vo.StudentVO;/** * 新增学生 * */public class InsertStudent {public static void main(String[] args) {//1.获得sqlSessionSqlSession session=MybatisUtil.getSqlSession(true);//2.获取mapper接口的代理对象StudentDao studentDao=session.getMapper(StudentDao.class);//3.实例化对象StudentVO studentVO =new StudentVO();studentVO.setStuName("哈哈");studentVO.setSex("男");//4.通过mapper接口添加学生studentDao.insertUser(studentVO);}}

2、通过id查询Student测试代码如下:

package com.cn.test1;import org.apache.ibatis.session.SqlSession;import com.cn.dao.StudentDao;import com.cn.utils.MybatisUtil;import com.cn.vo.StudentVO;public class FindUserById {public static void main(String[] args) {//1.获取sqlSession SqlSession session=MybatisUtil.getSqlSession();//2.获取mapper接口的代理对象StudentDao stuDao=session.getMapper(StudentDao.class);//3.sessio操作执行查询StudentVO stuVO=stuDao.selectStudentById(2);//4.打印结果System.out.println(stuVO.toString());}}



原创粉丝点击