Javaweb框架学习文章索引点这里
由于在dao接口实现类方法中调用操作数据库的方法中存在大量冗余代码,并且在调用方法的时候传入了部分硬编码参数等问题。引入mapper代理的方式可以解决这些问题,并提高效率。
下面是一个简单的mapper代理开发的示例:
1,编写javabean,以及对应的数据库表。User(id, name, age,tel)
2,编写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">
<!--这里namespace填的是javabean的全限定类名-->
<mapper namespace="com.hhh.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="com.hhh.dao.User">
select * from user where id = #{id}
</select>
<select id="findUserByName" parameterType="java.lang.String" resultType="com.hhh.dao.User">
select * from user where name like '%${value}%'
</select>
<insert id="insertInfoToUser" parameterType="com.hhh.dao.User">
insert into user(name, age, tel) values(#{name},#{age},#{tel})
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select last_insert_id();
</selectKey>
</insert>
<delete id="deleteById" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
<update id="updateUser" parameterType="com.hhh.dao.User">
update user set name = #{name} where id = #{id}
</update>
</mapper>
以上配置的sql语句主要是常见的增删改查
3,在SqlMapConfig.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">
<!-- 使用jdbc事务管理 -->
<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="123456"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
4,编写UserMapper接口
package com.hhh.mapper;
import java.util.List;
import com.hhh.dao.User;
public interface UserMapper {
/*
* 这里的方法名需要和xml中配置的名称相对应
* 输入参数类型和返回值类型也是要和xml中配置的相同
* */
public User findUserById(int id) throws Exception;
/*
* 虽然在xml中配置的返回值类型为User,但是由于返回值为多项内容,所以这里需要设置为List
* */
public List<User> findUserByName(String name) throws Exception;
public void deleteUserById(int id) throws Exception;
public void updateUser(User user) throws Exception;
public void insertInfoToUser(User user) throws Exception;
}
5,编写测试:
@Test
public void test2() throws Exception{
//1,获取sqlsession
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取由mybatis生成的mapper实现类
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//测试单项查询
/* User user= mapper.findUserById(1);
System.out.println(user);*/
//测试多项查询
/* List<User> list = mapper.findUserByName("张三");
System.out.println(list);*/
//测试插入
/* User user = new User("张三3",23,"12344");
mapper.insertInfoToUser(user);
sqlSession.commit();*/
//测试更新
/* User user = new User("张三5",23,"12344");
user.setId(23);//设置更新id为23的数据内容
mapper.updateUser(user);
sqlSession.commit();*/
//测试删除
mapper.deleteUserById(23);
sqlSession.commit();
}