35MyBatis - Dao开发的两种方式

简介: 35MyBatis - Dao开发的两种方式

MyBatis Dao开发的两种方式

两种dao的实现方式:

  1. 原始dao的开发方式
  2. 使用Mapper代理形式开发方式
    a)直接配置Mapper代理
    b)使用扫描包配置Mapper代理

现在有个需求:

  1. 实现根据用户id查询
  2. 实现根据用户名模糊查询
  3. 添加用户

创建pojo

public class User {
  private int id;
  private String username;// 用户姓名
  private String sex;// 性别
  private Date birthday;// 生日
  private String address;// 地址
  get/set。。。
}

传统dao的开发方式

原始的DAO开发接口+实现类来完成。

需要dao实现类需要继承SqlsessionDaoSupport

1.实现Mapper.xml

编写User.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="test">
  <!-- 根据用户id查询 -->
  <select id="queryUserById" parameterType="int" resultType="user">
    select * from user where id = #{id}
  </select>
  <!-- 根据用户名模糊查询用户 -->
  <select id="queryUserByUsername" parameterType="string"
    resultType="user">
    select * from user where username like '%${value}%'
  </select>
  <!-- 添加用户 -->
  <insert id="saveUser" parameterType="user">
    <selectKey keyProperty="id" keyColumn="id" order="AFTER"
      resultType="int">
      select last_insert_id()
    </selectKey>
    insert into user
    (username,birthday,sex,address)
    values
    (#{username},#{birthday},#{sex},#{address})
  </insert>
</mapper>
2.加载Mapper.xml

在SqlMapConfig如下图进行配置:

3.实现UserDao接口
public interface UserDao {
  /**
   * 根据id查询用户
   * 
   * @param id
   * @return
   */
  User queryUserById(int id);
  /**
   * 根据用户名模糊查询用户列表
   * 
   * @param username
   * @return
   */
  List<User> queryUserByUsername(String username);
  /**
   * 保存
   * 
   * @param user
   */
  void saveUser(User user);
}
4.实现UserDaoImpl实现类

编写DAO实现类,实现类必须集成SqlSessionDaoSupport

SqlSessionDaoSupport提供getSqlSession()方法来获取SqlSession

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
  @Override
  public User queryUserById(int id) {
    // 获取SqlSession
    SqlSession sqlSession = super.getSqlSession();
    // 使用SqlSession执行操作
    User user = sqlSession.selectOne("queryUserById", id);
    // 不要关闭sqlSession
    return user;
  }
  @Override
  public List<User> queryUserByUsername(String username) {
    // 获取SqlSession
    SqlSession sqlSession = super.getSqlSession();
    // 使用SqlSession执行操作
    List<User> list = sqlSession.selectList("queryUserByUsername", username);
    // 不要关闭sqlSession
    return list;
  }
  @Override
  public void saveUser(User user) {
    // 获取SqlSession
    SqlSession sqlSession = super.getSqlSession();
    // 使用SqlSession执行操作
    sqlSession.insert("saveUser", user);
    // 不用提交,事务由spring进行管理
    // 不要关闭sqlSession
  }
}
5.配置dao

把dao实现类配置到spring容器中,如下图

6.测试方法

编写测试方法如下:

public class UserDaoTest {
  private ApplicationContext context;
  @Before
  public void setUp() throws Exception {
    this.context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
  }
  @Test
  public void testQueryUserById() {
    // 获取userDao
    UserDao userDao = this.context.getBean(UserDao.class);
    User user = userDao.queryUserById(1);
    System.out.println(user);
  }
  @Test
  public void testQueryUserByUsername() {
    // 获取userDao
    UserDao userDao = this.context.getBean(UserDao.class);
    List<User> list = userDao.queryUserByUsername("张");
    for (User user : list) {
      System.out.println(user);
    }
  }
  @Test
  public void testSaveUser() {
    // 获取userDao
    UserDao userDao = this.context.getBean(UserDao.class);
    User user = new User();
    user.setUsername("曹操");
    user.setSex("1");
    user.setBirthday(new Date());
    user.setAddress("三国");
    userDao.saveUser(user);
    System.out.println(user);
  }
}

Mapper代理形式开发dao

1.实现Mapper.xml

编写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.itcast.mybatis.mapper.UserMapper">
  <!-- 根据用户id查询 -->
  <select id="queryUserById" parameterType="int" resultType="user">
    select * from user where id = #{id}
  </select>
  <!-- 根据用户名模糊查询用户 -->
  <select id="queryUserByUsername" parameterType="string"
    resultType="user">
    select * from user where username like '%${value}%'
  </select>
  <!-- 添加用户 -->
  <insert id="saveUser" parameterType="user">
    <selectKey keyProperty="id" keyColumn="id" order="AFTER"
      resultType="int">
      select last_insert_id()
    </selectKey>
    insert into user
    (username,birthday,sex,address) values
    (#{username},#{birthday},#{sex},#{address})
  </insert>
</mapper>
2.实现UserMapper接口
public interface UserMapper {
  /**
   * 根据用户id查询
   * 
   * @param id
   * @return
   */
  User queryUserById(int id);
  /**
   * 根据用户名模糊查询用户
   * 
   * @param username
   * @return
   */
  List<User> queryUserByUsername(String username);
  /**
   * 添加用户
   * 
   * @param user
   */
  void saveUser(User user);
}
3.配置mapper代理(方式一)

在applicationContext.xml添加配置

MapperFactoryBean也是属于mybatis-spring整合包

<!-- Mapper代理的方式开发方式一,配置Mapper代理对象 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <!-- 配置Mapper接口 -->
  <property name="mapperInterface" value="cn.itcast.mybatis.mapper.UserMapper" />
  <!-- 配置sqlSessionFactory -->
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
4.测试方法
public class UserMapperTest {
  private ApplicationContext context;
  @Before
  public void setUp() throws Exception {
    this.context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
  }
  @Test
  public void testQueryUserById() {
    // 获取Mapper
    UserMapper userMapper = this.context.getBean(UserMapper.class);
    User user = userMapper.queryUserById(1);
    System.out.println(user);
  }
  @Test
  public void testQueryUserByUsername() {
    // 获取Mapper
    UserMapper userMapper = this.context.getBean(UserMapper.class);
    List<User> list = userMapper.queryUserByUsername("张");
    for (User user : list) {
      System.out.println(user);
    }
  }
  @Test
  public void testSaveUser() {
    // 获取Mapper
    UserMapper userMapper = this.context.getBean(UserMapper.class);
    User user = new User();
    user.setUsername("曹操");
    user.setSex("1");
    user.setBirthday(new Date());
    user.setAddress("三国");
    userMapper.saveUser(user);
    System.out.println(user);
  }
}
5.扫描包形式配置mapper(方式二)
<!-- Mapper代理的方式开发方式二,扫描包方式配置代理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <!-- 配置Mapper接口 -->
  <property name="basePackage" value="cn.itcast.mybatis.mapper" />
</bean>
每个mapper代理对象的id就是类名,首字母小写
目录
相关文章
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
31 10
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
45 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
178 0
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
4月前
|
Java 数据库连接 mybatis
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
71 3
|
5月前
|
Java 数据库连接 API
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
63 3
|
5月前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
73 2
|
5月前
|
SQL Java 数据库连接
Mybatis如何使用mapper代理开发
Mybatis如何使用mapper代理开发