在 resources 文件夹下新建 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> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment> <!-- 使用jdbc事务管理,事务控制由mybatis--> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理--> <dataSource type="POOLED"> <property value="com.mysql.jdbc.Driver" /> <property value="jdbc:mysql:///sampledb" /> <property value="root" /> <property value="" /> </dataSource> </environment> </environments> <!-- 加载映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers> </configuration>同样的,在该文件夹下创建 log4j.properties 日志文件,设置为 DEBUG 模式:
# Global logging configuration #开发环境中使用 DEBUG 模式,上线后使用 INFO 或 ERROR 模式 log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 封装数据库对象,创建映射文件创建 User.java ,封装好数据库对象:
package cn.itcast.mybatis.po; import java.util.Date; public class User { //属性名要和数据库表的字段对应 private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", sex='" + sex + '\'' + ", birthday=" + birthday + ", address='" + address + '\'' + '}'; } }创建映射文件 User.xml,执行 SQL 查询操作:
<?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 命名空间,作用就是对sql进行分类化管理,理解为sql隔离 --> <mapper namespace="test"> <!-- 通过select执行数据库查询 id:标识映射文件中的sql,称为statement的id 将sql语句封装到mappedStatement对象中,所以将id称为statement的id parameterType:指定输入参数的类型 #{}标示一个占位符 #{value}其中value表示接收输入参数的名称,如果输入参数是简单类型,那么#{}中的值可以任意 resultType:指定sql输出结果的映射的java对象类型,select指定resultType表示将单条记录映射成java对象 --> <select parameterType="int" resultType="cn.itcast.mybatis.po.User"> SELECT * FROM USER WHERE id=#{value} </select> </mapper> 创建测试文件,执行 SQL 操作文件目录结构如图所示:
MybatisFirst.java:
package cn.itcast.mybatis.first; import cn.itcast.mybatis.po.User; 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 java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; public class MybatisFirst { //根据 id 查询用户,得到一条记录结果 @Test public void findUserByIdTest() throws IOException { //mybatis 配置文件 String resource = "SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream = (InputStream) Resources.getResourceAsStream(resource); //创建会话工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //通过工厂得到 SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //通过 SqlSession 操作数据库 //第一个参数:映射文件中 statement 的 id,等于=namespace+"."+statement 的id //第二个参数:指定和映射文件中所匹配的 paramenterType 类型的对象 User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user); //释放资源 sqlSession.close(); } }运行 findUserByIdTest() 方法, 查询 id 值为1的用户信息,可以看到控制台正确返回信息:
至此,一个完整的 mybatis 程序关于查询操作我们就实现出来了。