【mybaties官网: http://www.mybatis.org/mybatis-3/zh/index.html.】
具体学习步骤
(1) 框架执行流程
① 对框架执行图解分析
(2) 具体分布细节-环境准备
① 创建项目导入依赖包
② 准备主配置配置文件mybatis-config.xml
1) 配置数据库连接四要素
③ 编写MyBatisUtil工具类封装公共代码
1) 配置文件的读取-SqlSessionFactory对象创建
2) 提供返回SqlSession 会话操作对象的方法
(3) 入门案例
① 创建操作表对应的实体Pojo对象 User
② 创建表操作的接口文件 UserMapper.java
③ 创建接口对应的映射文件 UserMapper.xml
④ 主配置文件引入 UserMapper.xml映射文件
⑤ 代码编写
1) 接口中写具体增删改查方法
2) 映射文件写对应方法的功能标签
a. <insert><delete><select><update>
b. 标签有属性,属性的配置和接口的方法都遵循一定映射规则
a) 方法返回类型和 resultType类型相同
b) 方法参数和 属性 parameterType 相同
c) 方法名称和 id 的执行相同
⑥ 编写测试代码
1) 所有操作都必须有SqlSession对象
a. 创建SqlSession ,通过 MyBatisUtil工具直接提供方法直接获取
2) 创建 UserMapper代理对象
3) 执行CRUD(增删改查)具体方法
一. mybatis工程目录(使用xml配置写sql代码)
1.UserMapper.interface
package com.xxx.mapper;
import com.xxx.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper {
int insert(User user);
List<User> query();
User queryById(int id);
User queryByNP(@Param("name") String name, @Param("password") String password);
int delete(int id);
int update(User user);
}
2.UserMapper.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">
<mapper namespace="com.xxx.mapper.UserMapper">
<resultMap id="userMap" type="User">
<id property="id" column="u_id"/>
<result property="name" column="u_name"/>
<result property="password" column="u_password"/>
<result property="age" column="u_age"/>
</resultMap>
<insert id="insert" parameterType="User" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
insert into user(name,password,age) values (#{name},#{password},#{age});
</insert>
<select id="query" resultMap="userMap">
select id u_id,name u_name,password u_password,age u_age from user ;
</select>
<select id="queryById" parameterType="int" resultType="User">
select * from user where id=#{id};
</select>
<select id="queryByNP" parameterType="String" resultType="User">
select * from user where name=#{name} and password=#{password};
</select>
<delete id="delete" parameterType="int">
delete from user where id=#{id};
</delete>
<update id="update" parameterType="User">
update user set name=#{name} where id=#{id};
</update>
</mapper>
3.User.java
package com.xxx.pojo;
public class User {
private int id;
private String name;
private String password;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4.myBatisUtil
package com.xxx.util;
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;
public class mybatisUtil {
private mybatisUtil(){}
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession openSession(){
return sqlSessionFactory.openSession();
}
}
5.db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///test
username=root
password=1234
6.log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.xxx.mapper=TRACE
# 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
7.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">
<configuration>
<properties resource="db.properties"/>
<typeAliases>
<typeAlias alias="User" type="com.xxx.pojo.User"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xxx/mapper/UserMapper.xml"/>
</mappers>
</configuration>
8.maven依赖:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.xxx</groupId>
<artifactId>2.mybatis-curd</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
</project>
9.main
package com.xxx;
import com.xxx.mapper.UserMapper;
import com.xxx.pojo.User;
import com.xxx.util.mybatisUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class main {
public static void main(String[] args) {
//insert();
query();
//update();
}
public static void insert(){
SqlSession sqlSession = mybatisUtil.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setName("张三");
user.setPassword("123");
user.setAge(12);
int insert = mapper.insert(user);
System.out.println(user);
sqlSession.commit();
sqlSession.close();
}
public static void query(){
//List<User> query();
SqlSession sqlSession = mybatisUtil.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> query = mapper.query();
for (User user:query) {
System.out.println(user);
}
}
public static void queryById(){
//User queryById(int id);
SqlSession sqlSession = mybatisUtil.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.queryById(5);
}
public static void queryByNP(){
//User queryByNP(@Param("name") String name, @Param("password") String password);
SqlSession sqlSession = mybatisUtil.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.queryByNP("花满楼", "123");
}
public static void delete(){
SqlSession sqlSession = mybatisUtil.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int delete = mapper.delete(9);
sqlSession.commit();
sqlSession.close();
}
public static void update(){
SqlSession sqlSession = mybatisUtil.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(7);
user.setName("李四");
int update = mapper.update(user);
sqlSession.commit();
sqlSession.close();
}
}
二.mybaties工程目录(使用注解方式)
区别:
1.UserMapper接口代码中使用注解
package com.xxx.mapper;
import com.xxx.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Select("select id u_id,name u_name,age u_age,password u_password from user")
@Results({
@Result(id = true,property = "id",column = "u_id"),
@Result(property = "name",column = "u_name"),
@Result(property = "age",column = "u_age"),
@Result(property = "password",column = "u_password")
})
List<User> query();
@Select("select * from user where id=#{id}")
User queryById(int id);
@Select("select * from user where name=#{name} and password=#{password}")
User queryByNP(@Param("name") String name, @Param("password") String password);
@Insert("insert into user(name,password,age) values(#{name},#{password},#{age})")
@Options(
keyColumn = "id",
keyProperty = "id",
useGeneratedKeys = true
)
int insert(User user);
@Delete("delete from user where id=#{id}")
int delete(int id);
@Update("update user set name=#{name} where id=#{id}")
int update(User user);
}
2.mybatis-config中mapper导入的是接口的位置
3.测试类的使用
package com.xxx.test;
import com.xxx.mapper.UserMapper;
import com.xxx.pojo.User;
import com.xxx.util.mybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class UserTest {
private SqlSession sqlSession;
private UserMapper mapper;
@Before
public void before(){
sqlSession = mybatisUtil.sqlSession();
mapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void testQuery(){
mapper.query();
}
@Test
public void testQueryById(){
mapper.queryById(3);
}
@Test
public void testQueryByNP(){
mapper.queryByNP("段誉","123");
}
@Test
public void testInsert(){
User user = new User();
user.setName("郭靖");
user.setPassword("123");
user.setAge(18);
mapper.insert(user);
}
@Test
public void testDelete(){
mapper.delete(6);
}
@Test
public void testUpdate(){
User user = new User();
user.setId(1);
user.setName("小华");
mapper.update(user);
}
@After
public void after(){
sqlSession.commit();
sqlSession.close();
}
}