一、Mybatis环境搭建
- 创建一个maven工程
- 导入依赖
mybatis的依赖
数据库连接依赖(这里使用mysql)
可选:单元测试依赖,日志<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <mybatis.version>3.5.3</mybatis.version> <mysql-connector-java.version>8.0.13</mysql-connector-java.version> <log4j.version>1.2.17</log4j.version> <junit.version>4.11</junit.version> </properties> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> </dependencies>
- 新建 数据库参数文件 db.properties
定义这几个最基本的参数db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/seven?characterEncoding=UTF-8 db.username=root db.password=tiger
- 新建 一个xml文件,文件名不强制要求。这里使用mybatis.config.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"> <!-- 配置mybatis --> <configuration> <!-- 指定 MyBatis 数据库配置文件 --> <properties resource="db.properties"/> <!-- 环境配置 --> <!-- 默认使用mysql这个环境 --> <environments default="mysql"> <!-- mysql 数据库环境 --> <environment id="mysql"> <!-- 事务管理:JDBC --> <transactionManager type="JDBC"/> <!-- 数据源配置,POOLED是JDBC连接对象的数据源连接池的实现 --> <dataSource type="POOLED"> <property name="driver" value="${db.driver}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> </dataSource> </environment> </environments> <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 注解方式不需要这个 --> <mappers> <mapper resource="com/seven/mapper/GuestMapper.xml" /> </mappers> </configuration>
- 新建包和映射文件夹
注意:
- 创建resources/com/seven/mapper文件夹时,不要com.seven.mapper这样创建。因为这样创建后,只有一个叫com.seven.mapper的文件夹,是一级目录。
- 创建实体类,映射接口类,映射文件
实体类:Guest.java
映射接口类:GuestMapper.javapackage com.seven.entity; import java.util.Date; public class Guest { private Integer gid; private String gname; private String gpwd; private Date gbirthday; @Override public String toString() { return "Guest{" + "gid=" + gid + ", gname='" + gname + '\'' + ", gpwd='" + gpwd + '\'' + ", gbirthday=" + gbirthday + '}'; } public Integer getGid() { return gid; } public void setGid(Integer gid) { this.gid = gid; } public String getGname() { return gname; } public void setGname(String gname) { this.gname = gname; } public String getGpwd() { return gpwd; } public void setGpwd(String gpwd) { this.gpwd = gpwd; } public Date getGbirthday() { return gbirthday; } public void setGbirthday(Date gbirthday) { this.gbirthday = gbirthday; } }
映射文件:GuestMapper.xmlpackage com.seven.mapper; import com.seven.entity.Guest; import java.util.List; public interface GuestMapper { List<Guest> selectGuest(); }
创建后的工程结构:<?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.seven.mapper.GuestMapper"> <select id="selectGuest" resultType="com.seven.entity.Guest"> select * from t_guest </select> </mapper>
注意:
创建实体类:这里实体类中的成员变量名与表的字段名一致。
创建映射文件:
namespace配置为映射接口
sql语句的id必须和映射接口的方法名一致!!
必须要有返回结果封装的对象类型
- 测试
测试前先创建log4j的配置文件:log4j.properties
然后编写测试类:GuestTest.javalog4j.rootLogger=info, A1 , R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m -(:%L)%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=D:\\log\\testsocket_log.log log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
运行:import com.seven.entity.Guest; import com.seven.mapper.GuestMapper; 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 java.io.IOException; import java.io.InputStream; import java.util.List; public class GuestTest { public static void main(String[] args) throws IOException { // 1.导入mybatis配置文件,抛出异常 // 使用org.apache.ibatis.io.Resources导入mybatis的xml配置文件 InputStream resource = Resources.getResourceAsStream("mybatis.config.xml"); // 2.创建SqlSessionFactory工厂 // 说明:org.apache.ibatis.session.SqlSessionFactory是一个接口 // 使用org.apache.ibatis.session.SqlSessionFactoryBuilder来创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(resource); // 3.使用工厂生产SqlSession对象 SqlSession sqlSession = factory.openSession(); // 4.通过SqlSesison对象创建mapper接口的代理对象 GuestMapper guestMapper = sqlSession.getMapper(GuestMapper.class); // 5.通过代理对象来调用selectGuest函数,来访问数据库 List<Guest> guests = guestMapper.selectGuest(); // 6.打印一下结果 for (Guest guest : guests) { System.out.println(guest); } // 7.关闭资源 sqlSession.close(); resource.close(); } }
二、使用注解的方式
即:在映射接口中使用注解,编写sql语句。
好处:在映射文件中,需要配置namespace,resultType等。而如果使用注解的方式,就不需要配置这些。
坏处:
步骤
说明:即使使用注解的方式,仍然需要mybatis的xml配置文件。
- 删除映射文件 GuestMapper.xml
- 修改mybatis的配置文件
<?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"> <!-- 配置mybatis --> <configuration> <!-- 指定 MyBatis 数据库配置文件 --> <properties resource="db.properties"/> <!-- 环境配置 --> <!-- 默认使用mysql这个环境 --> <environments default="mysql"> <!-- mysql 数据库环境 --> <environment id="mysql"> <!-- 事务管理:JDBC --> <transactionManager type="JDBC"/> <!-- 数据源配置,POOLED是JDBC连接对象的数据源连接池的实现 --> <dataSource type="POOLED"> <property name="driver" value="${db.driver}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> </dataSource> </environment> </environments> <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 注解方式不需要这个 --> <mappers> <!-- 使用xml方式开发,指定持久化类的映射文件 --> <!-- <mapper resource="com/seven/mapper/GuestMapper.xml" />--> <!-- 使用注解方式开发,指定持久化类接口 --> <mapper class="com.seven.mapper.GuestMapper"/> </mappers> </configuration>
- 在映射接口中添加注解
package com.seven.mapper; import com.seven.entity.Guest; import org.apache.ibatis.annotations.Select; import java.util.List; public interface GuestMapper { @Select("select * from t_guest") List<Guest> selectGuest(); }
- 运行测试类
在这之前把log4j的等级改成了debug,可以看到执行的sql语句
更新时间:2020-1-9