MyBatis使用Mapper动态代理
采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:
1、Mapper.xml文件中的namespace与mapper接口的全类名相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同。
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同。
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同。
Mybatis框架主要步骤
1.创建表
2.创建javabean
3.创建核心配置文件 mybatis.config.xml
4.创建映射文件 UserMapper.xml
5.创建代理接口
6.java测试类增删改查
需要导入mybatis架包和数据库连接架包
mybatis架包可从该网站下载https://github.com/mybatis/mybatis-3/releases
1.数据库为test 表为user_m
2.javabean的四个属性
public class User {
private int id;
private String useraName;
private String userAge;
private String userAddress;
省略get.set方法和无参构造
}
3.核心配置文件mybatis.config.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" /> 数据库名
<property name="username" value="root" /> 账号
<property name="password" value="root" /> 密码
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="model/UserMapper.xml" /> 映射文件
</mappers>
</configuration>
4.映射文件 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="dao.IUserIn">
<resultMap type="model.User" id="uMap">
<id column="id" property="id"/> 主键写法 column表列 property类属性
<result column="userName" property="useraName"/> 其他写法
<result column="userAge" property="userAge"/>
<result column="userAddress" property="userAddress"/>
</resultMap>
<!-- 通过用户ID查询用户 -->
<select id="selectUserByID" parameterType="int" resultMap="uMap">
select * from user_m where id=#{id}
</select>
<select id="insert" parameterType="model.User">
insert into user_m values(#{id},#{userName},#{userAge},#{userAddress})
</select>
<select id="delete" parameterType="model.User">
delete from user_m where id=#{id}
</select>
<select id="update" parameterType="model.User">
update user_m set userAge=#{userAge} where id=#{id}
</select>
</mapper>
5.代理接口
public interface IUserIn {
public User selectUserByID(int id);
public void insert(User user);
public void delete(int i);
public void update(User user);
}
6.测试类
public class UserTest {
SqlSessionFactory factory=null;
@Before
public void Init() throws IOException{
//1.指定配置文件路径
String resource = "mybatis-config.xml";
//2.加载配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//3.获取一个session工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(inputStream);
}
@Test
public void que(){
SqlSession session=factory.openSession();
IUserIn iUserIn=session.getMapper(IUserIn.class);
User user=iUserIn.selectUserByID(1);
System.out.println(user.getId()+" "+user.getUseraName());
session.close();
}
@Test
public void insert(){
SqlSession session=factory.openSession();
IUserIn iUserIn=session.getMapper(IUserIn.class);
User user=new User(7,"66","88","45");
iUserIn.insert(user);
session.commit();
session.close();
}
}