Mybatis笔记(二)
2018/1/15 星期一 PM 3:33:24
- 通过mapper代理实现DAO
- jdk版本1.7
- 新建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>
<!-- 通过mapper接口类加载单个映射文件 -->
<!-- <mapper class="com.fyh.mybatis.mapper.UserMapper"/> -->
<!-- 通过扫描包方式加载mapper -->
<package name="com.fyh.mybatis.mapper"/>
</mappers>
</configuration>
8.mapper代理开发
- 创建一个包mapper存放mapper.java和mapper.xml需要同名
- UserMapper.xml
- mapper的namespace需要仔细
<?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 namespace="com.fyh.mybatis.mapper.UserMapper">
<!-- mapper代理 id对应方法名字
parameterType输入参数映射类型
resultType输出记录映射的类型 -->
<select id="findUserById" parameterType="int" resultType="com.fyh.mybatis.pojo.User">
SELECT * FROM User where id=#{value}
</select>
</mapper>
- UserMapper.java
package com.fyh.mybatis.mapper;
import com.fyh.mybatis.pojo.User;
public interface UserMapper {
//方法名字对应statement的id
//返回参数对应resultType
//输入参数对应parameterType
public User findUserById(Integer id) throws Exception;
}
9.创建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.创建测试:
- UserMapperTest.java:
package com.fyh.mybatis.mapper;
import static org.junit.Assert.*;
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 org.junit.Before;
import org.junit.Test;
import com.fyh.mybatis.pojo.User;
public class UserMapperTest {
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 {
//得到会话
SqlSession session = factory.openSession();
//通过会话得到 映射代理对象
UserMapper userMapper = session.getMapper(UserMapper.class);
//通过mapper代理查询
User user = userMapper.findUserById(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");
}
}
11.输出结果:
id | username | sex | birthday | address |
---|---|---|---|---|
2 | 王一百 | M | Fri May 06 00:00:00 GMT+08:00 1994 | 义乌 |
12.源代码地址:
http://download.csdn.net/download/qq_32454729/10206390