mybatis之入门到开发(四)之 Mapper动态代理方式
来源:互联网 发布:dota2天梯各分段 知乎 编辑:程序博客网 时间:2024/05/15 12:55
一:原始Dao开发方式
【分析】原始Dao开发方法需要程序员编写Dao接口和Dao实现类。
Dao接口实现类如下
public class UserDaoImpl implements UserDao { private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { super(); this.sqlSessionFactory = sqlSessionFactory; } @Override public User queryUserById(int id) { // 创建SqlSession SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 执行查询逻辑 User user = sqlSession.selectOne("queryUserById", id); // 释放资源 sqlSession.close(); return user; } @Override public List<User> queryUserByUsername(String username) { // 创建SqlSession SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 执行查询逻辑 List<User> list = sqlSession.selectList("queryUserByUsername", username); // 释放资源 sqlSession.close(); return list; } @Override public void saveUser(User user) { // 创建SqlSession SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 执行保存逻辑 sqlSession.insert("saveUser", user); // 提交事务 sqlSession.commit(); // 释放资源 sqlSession.close(); }}
原始Dao开发中存在以下问题:
Dao方法体存在重复代码:从上面的代码来看的话,只有sqlSession调用特定的方法不同,那么其他的都是累赘。无论是,创建SqlSessionFactoryBuilder,加载SqlMapConfig.xml配置文件,创建SqlsessionFactory
都是比较累赘的。
再者说了,针对一个User,存在一个UserPodo,UserController,UserMapper.xml,UserService,UserDao。比以前多了一个文件,使得项目管理更加的复杂起来。所以这里推荐Mapper动态代理方式
二:Mapper动态代理方式 :它其实不是一个技术,而是一种开发规范
2.1 遵循以下这四个规范
接口方法名 = User.xml中的id名
返回值的类型与mapper.xml文件中的返回值类型要一致
方法的入参类型要与mapper.xml的入参数类型要一致
命名空间 绑定此接口
2.2 这里以User为例子
//创建一个User.java的接口 public interface UserMapper{ //遵循四个原则 //接口方法名 = User.xml中的id名 //返回值的类型与mapper.xml文件中的返回值类型要一致 //方法的入参类型要与mapper.xml的入参数类型要一致 //命名空间 绑定此接口 /*这里的传入参数,跟返回参数,方法名都是跟UserMapper.xml定义的一样*/ public User selectUserById(Integer id); public void save(User user); public List<User> selectUserByLikeName(String username); public List<User> selectUserByLikeNameTwo(String username); public List<User> selectUserByQueryVo(QueryVo queryVo);}
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 --><mapper namespace="dgut.xiaozheng.mapper.UserMapper"> <!-- 保存用户信息 --> <insert id="save" parameterType="user" useGeneratedKeys="true"> insert into tb_user(username,sex,age) values (#{username},#{sex},#{age}) </insert> <!-- 通过id查找用户信息 --> <select id="selectUserById" parameterType="Integer" resultType="user"> select * from tb_user where id = #{id} </select> <!-- 模糊名查询用户信息 --> <select id="selectUserByLikeName" parameterType="string" resultType="user"> select * from tb_user where username like #{like} </select> <!-- 第二种方法,模糊查询用户信息 --> <select id="selectUserByLikeNameTwo" parameterType="string" resultType="user"> select * from tb_user where username like '%${value}%' </select> <!-- two days --> <select id="selectUserByQueryVo" parameterType="queryVo" resultType="user"> select * from tb_user where username like "%"#{user.username}"%" </select></mapper>
//4、修改命名空间。命名空间直接映射的是UserMapper<mapper namespace="dgut.xiaozheng.mapper.UserMapper">
2.3 写测试案例
@Test public void testSelectUserByQueryVo(){ SqlSessionFactory sqlSessionFactory = MybatisUtilsForMe.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession(); //核心代码,getMapper() UserMapper userMapper = session.getMapper(UserMapper.class); QueryVo queryVo = new QueryVo(); User user = new User(); user.setUsername("欣"); queryVo.setUser(user); List<User> userList = userMapper.selectUserByQueryVo(queryVo); for (User user2 : userList) { System.out.println(user2); } }//它这里可以通过getMapper方法获取Mapper对象,然后直接就可以调用接口中的方法
阅读全文
0 0
- mybatis之入门到开发(四)之 Mapper动态代理方式
- Mybatis之Mapper代理开发方式(四)
- Mybatis之Mapper动态代理方式
- Mybatis之Mapper动态代理方式
- MyBatis之Mapper动态代理开发
- MyBatis之 mapper代理方式
- MyBatis之Mapper动态代理
- Mybatis之Mapper动态代理
- Mybatis之Mapper动态代理
- mybatis入门--mapper代理方式开发
- (五)mybatis学习之mapper代理开发方式及与spring整合
- springmvc-mybatis 之mapper代理开发
- SSM框架Mybatis之Mapper代理开发
- mybatis开发Mapper代理方式
- MyBatis学习记录(3):Mapper动态代理方式开发DAO
- 【Mybatis从0到1-006】mybatis开发DAO之基于mapper代理
- Mybatis(二)— 使用Mapper动态代理方式进行开发
- Mybatis之mapper代理方法
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- string的实现
- java文件上传下载
- 使用JQuery,但不使用JQuery validate 来验证表单非空情况
- 大数据
- mybatis之入门到开发(四)之 Mapper动态代理方式
- 查询Sql Server数据库的作业的信息
- linux下追查线上问题常用命令
- zoj2750(最短路径)
- mariadb增量备份
- 如何在CSDN转载别人的博客
- Git中文乱码问题(win 7)
- 贪心,括号序列(Rikka with Parenthesis II,HDU 5831)
- property-placeholder源码解析