Mybatis笔记(一)
- iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
- 原理框图:
- 新建lib文件夹,存放使用的jar包。新建config包存放配置文件
- 使用到的包,mybatis3,mysql-connector
- 在config下创建log4j.properties文件,用于控制台输出信息
# 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
6.在config下创建db.properties,写入数据库的配置信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jdbctest?useUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=root
7.在config下创建一个目录mybatis存放mybatis的配置文件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>
<!-- 加载数据库配置文件db.properties -->
<properties resource="db.properties">
</properties>
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<!-- 通过resource加载单个映射文件 -->
<mapper resource="sqlmap/User.xml"/>
</mappers>
</configuration>
8.使用原始dao开发
在config下创建一个sqlMap目录存放映射文件User.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命名空间,作用就是对sql进行分类化管理 -->
<mapper namespace="test">
<!-- 在映射文件中配置很多sql语句 -->
<!-- 将sql语句封装到mappedStatement对象中,所以id成为statement的id -->
<!-- parameterType指定输入参数的类型 -->
<!-- #{}表示占位符 -->
<!-- #{id}:其中id表示接入输入的参数,参数名称就是id
如果输入参数类型是简单类型,这个名字可以是value或者其他-->
<!-- resultType 指定 sql输出记录 所映射的类型 -->
<!-- select 表示单条记录所映射的java对象 -->
<select id="findUserById" parameterType="int" resultType="com.fyh.mybatis.pojo.User">
SELECT * FROM User where id=#{value}
</select>
</mapper>
10 . 创建pojo用于接收数据的类型:
- 数据表User:
/*
Navicat MySQL Data Transfer
Source Server : 本机mysql
Source Server Version : 50547
Source Host : localhost:3306
Source Database : jdbctest
Target Server Type : MYSQL
Target Server Version : 50547
File Encoding : 65001
Date: 2018-01-15 12:51:47
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_user_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('2', '王一百', '1994-05-06 00:00:00', 'M', '义乌');
INSERT INTO `user` VALUES ('4', '吴王尔', '1996-01-01 00:00:00', 'F', '东站');
INSERT INTO `user` VALUES ('5', '范特西', '2018-01-13 15:16:16', 'M', '金华桥儿头');
INSERT INTO `user` VALUES ('6', '王三', '1978-07-07 00:00:00', 'M', '杭州');
INSERT INTO `user` VALUES ('7', '范特西', '2018-01-13 15:36:40', 'M', '金华桥儿头');
INSERT INTO `user` VALUES ('8', '范玉衡', '2018-01-13 15:37:34', 'M', '金华桥儿头');
INSERT INTO `user` VALUES ('11', '范特西的', '2018-01-13 19:00:02', 'M', '金华桥儿头');
- User.java
package com.fyh.mybatis.pojo;
import java.util.Date;
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
10.创建DAO层:
- 建立DAO接口
- UserDAO.java:
package com.fyh.mybatis.dao;
import com.fyh.mybatis.pojo.User;
public interface UserDAO {
public User findUserById(Integer id) throws Exception;
}
- 建立接口实现类
- UserDAOImp.java:
package com.fyh.mybatis.dao;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.fyh.mybatis.pojo.User;
public class UserDAOImp implements UserDAO{
private SqlSessionFactory sqlSessionFactory = null;
//通过构造函数注入SqlSessionFactory
public UserDAOImp(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User findUser(Integer id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
//第一个参数是statement的id:namespace.id找到对应的statement
//第二个参数是传入statement的参数
User user = sqlSession.selectOne("test.findUserById",id);
return user;
}
}
11.创建测试:
- UserDAOImpTest.java:
package com.fyh.mybatis.dao;
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.Before;
import org.junit.Test;
import com.fyh.mybatis.pojo.User;
public class UserDAOImpTest {
private SqlSessionFactory factory = null;
@Before
public void setUp() throws Exception {
// 需要手动注入工厂
String resource = "mybatis/SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception {
UserDAO userDAO = new UserDAOImp(factory);
//查找2号user
User user = userDAO.findUser(2);
System.out.println("id\tusername\tsex\tbirthday\taddress");
System.out.print(user.getId()+"\t");
System.out.print(user.getUsername()+"\t");
System.out.print(user.getSex()+"\t");
System.out.print(user.getBirthday()+"\t");
System.out.print(user.getAddress()+"\n");
}
}
12.输出结果:
id | username | sex | birthday | address |
---|---|---|---|---|
2 | 王一百 | M | Fri May 06 00:00:00 GMT+08:00 1994 | 义乌 |
13.源代码地址: