一、引言
前篇的文章中没有使用mapper代理的方式,调用方法比较麻烦,造成很多代码重复,所以mybatis在输入输出映射的基础上又添加了mapper代理的配置方式方便使用。
先上张图,这张图是说明mybatis发展的进程,本文使用了描红的方法,并没有和spring整合==
二、代码
代码结构如下:
1.配置文件:
SqlMapConfig.xml
这里使用了mapper包自动搜索(此时mapper的java类与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>
<!--加载属性文件 -->
<properties resource="db.properties"></properties>
<!--别名 -->
<typeAliases>
<package name="cn.xcy.mybatis.po"></package>
</typeAliases>
<!-- 对事务的管理和连接池的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--加载映射文件 -->
<mappers>
<package name="cn.xcy.mybatis.mapper"/>
</mappers>
</configuration>
log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1/mybatis
jdbc.username=root
jdbc.password=123
2.mapper中文件:
这两个文件要在同一个文件夹(mapper搜索文件夹),同时命名必须一致==
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="cn.xcy.mybatis.mapper.UserMapper">
<resultMap type="user" id="userResultMap">
<id column="_id" property="id" />
<result column="_name" property="name" />
<result column="_age" property="age" />
</resultMap>
<select id="findUserByID" parameterType="int" resultType="user">
select
* from T_USER where id= #{id}
</select>
<select id="findUsers" resultType="user">
select * from T_USER
</select>
<select id="findUsersByName" parameterType="string" resultType="user">
select * from T_USER where name like '%${value}%'
</select>
<select id="findUserList" parameterType="uservo" resultType="usercustom">
select * from T_USER where id=#{userCustom.id} and name like
'%${userCustom.name}%'
</select>
<select id="findUserByIDResultmap" parameterType="int"
resultMap="userResultMap">
select id _id,name _name,age _age
from T_USER where id= #{id}
</select>
</mapper>
UserMapper.java
package cn.xcy.mybatis.mapper;
import java.util.List;
import cn.xcy.mybatis.po.User;
import cn.xcy.mybatis.po.UserCustom;
import cn.xcy.mybatis.po.UserVo;
public interface UserMapper {
public User findUserByID(int id) throws Exception;
public List<User> findUsers() throws Exception;
public List<User> findUsersByName(String name) throws Exception;
public List<UserCustom> findUserList(UserVo userVo) throws Exception;
public User findUserByIDResultmap(int id) throws Exception;
}
3.po文件:
User.java
package cn.xcy.mybatis.po;
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
UserCustom.java
package cn.xcy.mybatis.po;
public class UserCustom extends User {
}
UserVo.java
package cn.xcy.mybatis.po;
public class UserVo {
private UserCustom userCustom;
public UserCustom getUserCustom() {
return userCustom;
}
public void setUserCustom(UserCustom userCustom) {
this.userCustom = userCustom;
}
}
4.测试:
String resource="SqlMapConfig.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
//创建sessionfactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession =sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.findUserByID(2);
List<User> users=userMapper.findUsers();
List<User> listUsers=userMapper.findUsersByName("谢");
UserVo userVo=new UserVo();
UserCustom userCustom=new UserCustom();
userCustom.setId(1);
userCustom.setAge(26);
userVo.setUserCustom(userCustom);
List<UserCustom> listUsers2=userMapper.findUserList(userVo);
User user1=userMapper.findUserByIDResultmap(3);
sqlSession.close();
System.out.println(user);
三、总结
- mapper代理方法的提出
- mapper代理方法的实现