二、搭建MyBatis

1.开发环境

IDE:idea2021.1.1

构建工具:maven 3.5.4

MySQL版本:5.7

MyBatis版本:3.5.7

2.创建Maven工程

①创建Maven工程 MyBatis_Test

②配置Maven环境

 ③在pom.xml进行配置

配置打包方式是jar

<packaging>jar</packaging>

添加相关依赖

<dependencies>
    <!--MyBatis核心-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <!--junit测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.3</version>
    </dependency>
	<!-- log4j日志 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
</dependencies>

 3.创建MyBatis的核心配置文件

  1. 习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。
  2. 核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息
  3. 核心配置文件存放的位置是src/main/resources目录下

<?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/atguigu"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件,未配置-->
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

4.创建mapper接口

  1. MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

①创建表t_user

 ②创建对应的实体类

创建JavaBean对象

③创建mapper接口

5.创建MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。

  1. 对象:Java的实体类对象
  2. 关系:关系型数据库
  3. 映射:二者之间的对应关系

映射文件的命名规则

  1. 表所对应的实体类的类名+Mapper.xml
  2. 例如:表t_user,映射的实体类是User,所对应的映射文件是UserMapper.xml
  3. 因此一个映射文件对应一个实体类,对应一张表的操作
  4. MyBatis映射文件用于编写sql,访问以及操作表中的数据
  5. MyBatis映射文件存放的位置是src/main/resources/mappers目录下

 MyBatis中面向接口操作数据,保证两个一致

  1. mapper接口的全类名和映射文件的命名空间(namespace)保持一致
  2. Mapper接口的方法的方法名和映射文件编写的SQL标签的id属性保持一致

①在UserMapper.class

 ②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="com.atguigu.mybatis.mapper.UserMapper">
    <insert id="insertUser">insert t_user values (null,"test666","test666","test666")</insert>
</mapper>

 ③完整的mybatis-config.xml配置类

6.通过junit测试添加功能

  1. SqlSession:代表java程序和数据库之间的会话(HttpSession是Java程序和浏览器之间的会话)
  2. SqlSessionFactory:是“生产”SqlSession的工厂
  3. 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们可以把创建这个对象的相关代码封装到一个“工厂类“中,以后都使用这个工厂类生产我们需要的对象。

public class UserMapperTest {

   @Test
   public void insertUser() throws IOException {
      // 读取MyBatis的核心配置文件
      InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
      // 获取SqlSessionFactoryBuilder对象
      SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
      // sqlSessionFactory
      SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
      // 获取sqlSession
      SqlSession sqlSession = sqlSessionFactory.openSession();
      // 获取mapper接口对象
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      // 测试功能
      int result = mapper.insertUser();
      // 提交事务
      sqlSession.commit();
      if (result > 0){
         System.out.println("成功");
      }else {
         System.out.println("失败");
      }

   }
}

 

7.优化功能,自动提交事务

  1. 在获取sqlSession对象时,使用SqlSession sqlSession = sqlSessionFactory.openSession(true);传入一个Boolean类型的参数,值为true,这样就可以自动提交
public class UserMapperTest {

   @Test
   public void insertUser() throws IOException {
      // 读取MyBatis的核心配置文件
      InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
      // 获取SqlSessionFactoryBuilder对象
      SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
      // sqlSessionFactory
      SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
      // 获取sqlSession
      SqlSession sqlSession = sqlSessionFactory.openSession(true);
      // 获取mapper接口对象
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      // 测试功能
      int result = mapper.insertUser();
      if (result > 0){
         System.out.println("成功");
      }else {
         System.out.println("失败");
      }
   }
}

 8.加入log4j日志功能

  1. 在pom添加日志依赖
<!-- log4j日志 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

     2. 加入log4j的配置文件

log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下

 日志的级别:FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试) 从左到右打印的内容越来越详细

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

 9.通过junit测试修改和删除功能

 ①在UserMapper接口下面写上修改和删除的方法名

 

②在UserMapper.xml写上对应的sql语句

[1]. mapper接口的全类名和映射文件的命名空间(namespace)保持一致

[2]. mapper接口的方法的方法名和映射文件编写的SQL标签的id属性保持一致

 

③测试功能

  1. 测试修改
@Test
public void updateUser() throws IOException {
   // 读取MyBatis的核心配置文件
   InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
   // 创建sqlSessionFactory
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
   // 创建sqlSession
   SqlSession sqlSession = sqlSessionFactory.openSession(true);
   // 获取mapper接口对象
   UserMapper mapper = sqlSession.getMapper(UserMapper.class);
   //测试功能
   int result = mapper.updateUser();
   if (result > 0){
      System.out.println("成功");
   }else {
      System.out.println("失败");
   }

}

        2.测试删除

@Test
public void deleteUser() throws IOException {
   // 读取配置文件
   InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
   // 配置工厂
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
   // 创建SqlSession
   SqlSession sqlSession = sqlSessionFactory.openSession(true);
   // 获取mapper接口
   UserMapper mapper = sqlSession.getMapper(UserMapper.class);
   // 执行删除方法
   int result = mapper.deleteUser();
   if (result > 0){
      System.out.println("成功");
   }else {
      System.out.println("失败");
   }

}

10.测试查询功能

  1. 查询一个实体类对象

①在UserMapper.java

public interface UserMapper {
   // 查询一个实体类对象
   User getUserById();
}

②在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="com.atguigu.mybatis.mapper.UserMapper">
    <!--User getUserById();-->
    <select id="getUserById" resultType="com.atguigu.mybatis.pojo.User">
        select * from t_user where id = 43
    </select>

③测试

@Test
public void select() throws IOException {
   // 读取配置文件
   InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
   // 配置工厂
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
   // 创建SqlSession
   SqlSession sqlSession = sqlSessionFactory.openSession(true);
   // 获取mapper接口
   UserMapper mapper = sqlSession.getMapper(UserMapper.class);
   // 执行删除方法
   User user = mapper.getUserById();
   System.out.println(user);
}

        2.查询集合

①在UserMapper.java

public interface UserMapper {
   // 查询一个实体类对象
   List<User> getAllUser();
}

②在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="com.atguigu.mybatis.mapper.UserMapper">
    <!--User getAllUser()-->
    <select id="getAllUser" resultType="com.atguigu.mybatis.pojo.User">
        select * from t_user
    </select>
</mapper>

③测试

@Test
public void select() throws IOException {
   // 读取配置文件
   InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
   // 配置工厂
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
   // 创建SqlSession
   SqlSession sqlSession = sqlSessionFactory.openSession(true);
   // 获取mapper接口
   UserMapper mapper = sqlSession.getMapper(UserMapper.class);
   // 执行删除方法
   List<User> allUser = mapper.getAllUser();
   for (User user:allUser) {
      System.out.println(user);
   }
}

【注意】

①查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系

  1. resultType:自动映射,用于属性名和表中字段名一致的情况
  2. resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致情况

②当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值