美文网首页
使用MyBatis进行Dao层开发

使用MyBatis进行Dao层开发

作者: 花无缺_0159 | 来源:发表于2019-02-19 10:12 被阅读0次

【目录】
1 普通Dao层开发
2 Mapper动态代理开发

1 普通Dao层开发

准备数据库:

创建User表 插入一些数据

在Eclipse里新建项目目录如下:

项目目录结构

给出项目代码。

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/database?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="admin"/>
      </dataSource>
    </environment>
  </environments>
  
 <!-- 配置映射器的位置 -->
  <mappers>
    <mapper resource="mapper/UserMapper.xml"/> 
   </mappers> 
   
</configuration>    

User.java:

package com.test.bean;

import java.util.Date;

public class User {

    /**
     * CREATE TABLE `user` (
      `u_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
      `u_username` VARCHAR(64) NOT NULL COMMENT '用户名',
      `u_password` VARCHAR(64) NOT NULL COMMENT '用户密码',
      `u_sex` VARCHAR(16) DEFAULT NULL COMMENT '用户性别',
      `u_createTime` DATETIME DEFAULT NULL COMMENT '用户创建时间',
      `u_cid` INT(11) NOT NULL COMMENT '用户国家id',
     */
    
    private Integer u_id;
    private String u_username;
    private String u_password;
    private String u_sex;
    private Date u_createTime;
    private Integer u_cid;
    
    public Integer getU_id() {
        return u_id;
    }
    public void setU_id(Integer u_id) {
        this.u_id = u_id;
    }
    public String getU_username() {
        return u_username;
    }
    public void setU_username(String u_username) {
        this.u_username = u_username;
    }
    public String getU_password() {
        return u_password;
    }
    public void setU_password(String u_password) {
        this.u_password = u_password;
    }
    public String getU_sex() {
        return u_sex;
    }
    public void setU_sex(String u_sex) {
        this.u_sex = u_sex;
    }
    public Date getU_createTime() {
        return u_createTime;
    }
    public void setU_createTime(Date u_createTime) {
        this.u_createTime = u_createTime;
    }
    public Integer getU_cid() {
        return u_cid;
    }
    public void setU_cid(Integer u_cid) {
        this.u_cid = u_cid;
    }
    @Override
    public String toString() {
        return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_sex=" + u_sex
                + ", u_createTime=" + u_createTime + ", u_cid=" + u_cid + "]";
    }
}

UserDAO.java:

package com.test.dao;

import com.test.bean.User;

public interface UserDao {
    
    //根据id查询用户
    public User getUserById(Integer id);
    
}

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="UserMapper">
    
    <!-- 根据id查询用户 -->
    <select id="selectUserById" parameterType="Integer" resultType="com.test.bean.User">
         select * from user where u_id = #{id}
    </select>
</mapper>

UserDaoImpl.java:

package com.test.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.test.bean.User;

public class UserDaoImpl implements UserDao {
    //sqlSession工厂
    private SqlSessionFactory ssf;
    
    //通过构造器给ssf 赋值
    public UserDaoImpl(SqlSessionFactory ssf) {
        this.ssf = ssf;
    }


    public User getUserById(Integer id) {
        //生产一个sqlSession
        SqlSession session = ssf.openSession();
        //操作数据库
        return session.selectOne("UserMapper.selectUserById", id);
    }
}

UserDaoTest.java:

package com.test.test;


import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.test.bean.User;
import com.test.dao.UserDao;
import com.test.dao.UserDaoImpl;

public class UserDaoTest {
    
    //sqlSession工厂
    private static SqlSessionFactory ssf;
    
    static {
        String resource = "sqlMapConfig.xml";
        InputStream in;
        try {
            in = Resources.getResourceAsStream(resource );
            SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
             ssf = ssfb.build(in);
             in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @Test
    public void DaoTest() {
        UserDao dao = new UserDaoImpl(ssf);
        User user = dao.getUserById(1);
        System.out.println(user);
    }
    
}

进行测试。

测试结果

2 Mapper动态代理开发

复制上面的项目,命名为HelloMyBatisMapper。删除dao包及包内所有文件、com.test/test/UserDaoTest.java,新建动态代理接口类mapper/UserMapper.java、测试类com.test/test/MapperTest.java,整理项目目录如下所示:

项目目录

mapper动态代理开发四大原则 + 一个注意
1、接口方法名需要与mapper.xml的要调用的sql语句的id一致
2、接口的形参类型需要与mapper.xml parameterType 一致
3、接口的返回值需要与mapper.xml resultType一致
4、mapper.xml 中namespace要与接口的全包名一致
5、注意mapper动态代理开发中,动态代理对象调用,根据返回值类型来自动选择,如果返回的是list则调用的是selectList方法,如果返回的是单个值或者是对象那么调用的是selectOne方法。(selectOne: 查询一条记录、selectList: 查询一条或多条记录。)

一个小tips:在UserMapper.xml中选中全包名+ctrl,可以检查链接是否正确。

给出相关代码。
UserMapper.java:

package com.test.mapper;

import com.test.bean.User;

public interface UserMapper {
    //mapper动态代理开发四大原则 + 一个注意
    //1、接口方法名需要与mapper.xml的要调用的sql语句的id一致
    //2、接口的形参类型需要与mapper.xml parameterType 一致
    //3、接口的返回值需要与mapper.xml resultType一致
    //4、mapper.xml 中namespace要与接口的全包名一致
    //5、注意mapper动态代理开发中,根据返回值类型来自动选择
    
    //通过id查询一个用户
    public User selectUserById(Integer id);
}

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的修改 -->
<mapper namespace="com.test.mapper.UserMapper">
    
    <!-- 根据id查询用户 -->
    <select id="selectUserById" parameterType="Integer" resultType="com.test.bean.User">
         select * from user where u_id = #{id}
    </select>

</mapper>

MapperTest.java:

package com.test.test;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.test.bean.User;
import com.test.mapper.UserMapper;

public class MapperTest {
    
    @Test
    public void Test1() throws IOException {
        String resource = "sqlMapConfig.xml";
        //读取配置文件
        InputStream in = Resources.getResourceAsStream(resource );
        
        //创建sqlSessionfactory
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
         
        //生产一个sqlSession
        SqlSession session = ssf.openSession();
        
        UserMapper mapper = session.getMapper(UserMapper.class);
        
        User user = mapper.selectUserById(1);
        System.out.println(user);
        
    }
}

进行测试。

测试结果

可以看出,使用Mapper动态代理提高了开发效率,推荐使用。

相关文章

  • 使用MyBatis进行Dao层开发

    【目录】1 普通Dao层开发2 Mapper动态代理开发 1 普通Dao层开发 准备数据库: 在Eclipse里新...

  • [java]40、MyBatis-dao

    1、使用MyBatis实现dao层 1.1、使用MyBatis实现dao层的几种方式 1、自定义dao实现类,在实...

  • spring boot教程

    描述 集成mybatis 首先要引入mybatis依赖 注解式开发 编写dao层,在接口中使用注解开发。@Mapp...

  • SpringBoot报找不到 dao 问题

    项目场景: 使用 mybatis + springboot 进行开发,执行时报找不到 dao 文件 问题解决步骤:...

  • Mybatis 开发 Dao

    前言 | 使用Mybatis 开发 dao,通常有两个方法,即原始 dao 开发方法和 Mapper 动态代理开发...

  • MyBatis框架技术

    MyBatis框架代替原来DAO层的工作,框架为我们实现数据库操作,并进行了简化,方便使用 MyBatis框架的工...

  • 高并发秒杀API(二)

    前言 本篇将完成DAO层的设计与开发,包括: 数据库、DAO实体与接口设计与编码 基于MyBatis实现DAO编程...

  • MyBatis入门(二)

    学习内容: 使用Mybatis开发Dao,通常有两个方法: 原生Dao开发 Mapper接口开发方法 1. 原生D...

  • SpringBoot + thymeleaf 实现简单的登陆验证

    sql语句 使用mybatis插件自动生成代码 dao层· peopleMapper.xml service层 c...

  • Mybatis学习笔记(三)_Dao方法的代理开发

    Web后端开发中需要开发DAO层,现在先来看看在Mybatis中原始方法开发DAO. 即是通过接口—实现类的方式来...

网友评论

      本文标题:使用MyBatis进行Dao层开发

      本文链接:https://www.haomeiwen.com/subject/ntoneqtx.html