mybatis基于mapper开发(五)

来源:互联网 发布:淘宝包包代理 编辑:程序博客网 时间:2024/05/16 18:24

基于mapper开发,只需写mapper接口(相当于Dao接口)
基于mapper开发需要遵循一些mapper开发规范,mybatis可以自动生成mapper实现类的代理对象
mapper代理开发规范
1. mapper接口的全限定名要和mapper映射文件的namespace值一致。
2. mapper接口的方法名称要和mapper映射文件的statement的id一致。
3. mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。
4. mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

这里写图片描述

UserMapper接口

package com.test.mapper;import com.test.domain.User;public interface UserMapper {    User findUserById(int id);    User findUserByUserName(String userName);    void insertUser(User user);}

UserMapper.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.test.mapper.UserMapper">    <select id="findUserById" parameterType="int" resultType="com.test.domain.User">        SELECT * FROM USER WHERE id =#{id}    </select>    <select id="findUserByUserName" parameterType="String" resultType="com.test.domain.User">        SELECT * FROM USER WHERE userName like '%${value}%'    </select>    <insert id="insertUser" parameterType="com.test.domain.User">        <selectKey keyProperty="id" resultType="int" order="AFTER">            SELECT LAST_INSERT_ID()        </selectKey>        INSERT INTO USER         (username,birthday,sex,address)         VALUES        (#{username},#{birthday},#{sex},#{address})    </insert></mapper>

注:mapper.xml配置文件中的namespace需要与mapper接口的全类名一致

全局配置文件sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <environments default="development">        <environment id="development">            <!-- 配置JDBC事务控制,由mybatis进行管理 -->            <transactionManager type="JDBC"></transactionManager>            <!-- 配置数据源,采用mybatis连接池 -->            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver" />                <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8" />                <property name="username" value="root" />                <property name="password" value="root" />            </dataSource>        </environment>    </environments>    <!-- 加载映射文件 -->    <mappers>        <mapper resource="mapper/UserMapper.xml" />    </mappers></configuration>

mappers标签用法

//相对于类路径的资源<mapper resource="mapper/UserMapper.xml" />
//完全限定路径<mapper url="file:///F:\work\store\mybatis_01\config\mapper\UserMapper.xml"/>
//mapper接口的全限定名//注:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;<mapper class="com.test.mapper.UserMapper"/>
//指定包下的所有映射文件//注:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;<package name="com.test.mapper"/>

测试代码

    @org.junit.Test    public void test_02() throws Exception{        SqlSession sqlSession = sqlSessionFactory.openSession();        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        User user = mapper.findUserById(1);        System.out.println(user);    }    @org.junit.Test    public void test_03() throws Exception{        SqlSession sqlSession = sqlSessionFactory.openSession();        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        User user = new User();        user.setUsername("不知火舞");        user.setSex("1");        user.setBirthday(new Date());        user.setAddress("民治");        mapper.insertUser(user);        User user2 = mapper.findUserById(user.getId());        sqlSession.commit();        System.out.println(user2);    }