mybatis-入门
学而时习之,不亦说乎!
--《论语》
开发环境:
JDK7
Eclipse
Mybatis3.4.0
mysql5.6
参考资料:
http://www.mybatis.org/mybatis-3/zh/index.html
http://books.sonatype.com/mvnref-book/reference/index.html
说明:本文使用maven构建项目,属于mybatis的个人入门笔记。
百度mybatis背景介绍:
create database mybatis; use mybatis; create table user ( id int primary key auto_increment comment '主键id', name varchar(30) comment '姓名', age int comment '年龄', birthday date comment '生日', address varchar(200) comment '地址' )default charset utf8; insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市'); insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市'); insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市'); insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市'); insert into user(name,age,birthday,address) values('zby',24,'1993-05-05','四川省成都市'); select * from user;
![](https://images2015.cnblogs.com/blog/869458/201705/869458-20170522103643054-273064842.png)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zby</groupId> <artifactId>mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> </project>
package com.zby.domain;
import java.util.Date;
/**
*
* @描述:对应数据库user表的实体类
* @类名:
* @作者: zby
* @创建时间: 2017年5月22日 上午10:23:21
* @版本: v1.0
*/
public class User {
private Integer id;
private String name;
private Integer age;
private Date birthday;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
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 + ", name=" + name + ", age=" + age + ", birthday=" + birthday + ", address=" + address
+ "]";
}
}
<?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> <!-- 配置mybatis的环境信息 --> <environments default="development"> <environment id="development"> <!-- 配置JDBC事务控制,由mybatis进行管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源,采用mybatis连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!-- 加载映射文件 --> <mappers> <mapper resource="mapper/UserMapper.xml" /> </mappers> </configuration>
<?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:命名空间,对statement的信息进行分类管理 --> <!-- 注意:在mapper代理时,它具有特殊及重要的作用 --> <mapper namespace="test"> <!-- 根据用户ID查询用户信息 --> <!-- select:表示一个MappedStatement对象 --> <!-- id:statement的唯一标示 --> <!-- #{}:表示一个占位符? --> <!-- #{id}:里面的id表示输入参数的参数名称,如果该参数是简单类型,那么#{}里面的参数名称可以任意 --> <!-- parameterType:输入参数的java类型 --> <!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) --> <select id="findUserById" parameterType="int" resultType="com.zby.domain.User"> SELECT * FROM USER WHERE id =#{id} </select> </mapper>
7)为了看到日志打印,在src/main/resources文件夹下加入log4j.properties配置文件,内容如下:
# Global logging configuration 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
8)编写测试代码:
package com.zby; 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 com.zby.domain.User; public class Application { public static void main(String[] args) throws Exception { // 1、读取配置文件 String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 2、根据配置文件创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 3、SqlSessionFactory创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 4、SqlSession执行statement,并返回映射结果 // 第一个参数:statement的id,建议:namespace.statementId(确保唯一) // 第二个参数:入参的值,它的类型要和映射文件中对应的statement的入参类型一致 User user = sqlSession.selectOne("test.findUserById", 1); // 打印输出结果集 System.out.println(user); // 5、关闭SqlSession sqlSession.close(); } }
9)控制台打印执行结果:
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1591152121.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5ed70df9]
DEBUG [main] - ==> Preparing: SELECT * FROM USER WHERE id =?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 1
User [id=1, name=zby, age=24, birthday=Wed May 05 00:00:00 CST 1993, address=四川省成都市]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5ed70df9]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@5ed70df9]
DEBUG [main] - Returned connection 1591152121 to pool.