1.创建数据库和相应数据表
创建数据库 test
创建表:t_user
CREATE TABLE IF NOT EXISTS t_user(
id INT AUTO_INCREMENT,
name VARCHAR(20) DEFAULT NULL,
gender CHAR(1) DEFAULT NULL,
address VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET = utf8
2.搭建一个maven项目(使用的idea)
New Project - 选择Maven - Next
填入项目名称,点击finish即可
初始结构如下:
3.引入mybatis需要的基础jar包
在pom.xml中增加如下依赖:单元测试、mybatis、mysql连接、log4j。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
4.编写mybatis需要的配置文件
目录结构如下:
mybatis配置文件: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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:5566/test" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
log4j.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
5.编写测试用例
User实体:
package com.mybatis.bean;
public class User {
private Integer id;
private String name;
private String gender;
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", address='" + address + '\'' +
'}';
}
}
mapper接口类:
package com.mybatis.dao;
import com.mybatis.bean.User;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
public User getUserById(@Param("id") int id);
public boolean addUser(@Param("user") User user);
public boolean updateUser(@Param("user") User user);
public boolean deleteUser(@Param("id") int id);
}
mapper.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.mybatis.dao.UserMapper">
<insert id="addUser">
insert into t_user
(name, gender, address)
values
(#{user.name}, #{user.gender}, #{user.address})
</insert>
<update id="updateUser">
update t_user set name = #{user.name}, address = #{user.address}
where id = #{user.id}
</update>
<delete id="deleteUser">
delete from t_user where id = #{id}
</delete>
<select id="getUserById" resultType="com.mybatis.bean.User">
select * from t_user where id = #{id}
</select>
</mapper>
6.进行增删改查测试
注意:进行add、update、delete相关操作时,需要执行事务提交方法,不然数据不会更新。
package test;
import com.mybatis.bean.User;
import com.mybatis.dao.UserMapper;
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;
public class JunitTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException{
String resources = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resources);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void selectUserById() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
} finally {
openSession.close();
}
}
@Test
public void addUser() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user = new User();
user.setName("李四");
user.setGender("2");
user.setAddress("武汉");
boolean isSuccess = mapper.addUser(user);
openSession.commit();
System.out.println(isSuccess);
} finally {
openSession.close();
}
}
@Test
public void updateUser() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user = new User();
user.setId(1);
user.setAddress("上海");
user.setName("张三丰");
boolean isSuccess = mapper.updateUser(user);
openSession.commit();
System.out.println(isSuccess);
} finally {
openSession.close();
}
}
@Test
public void deleteUser() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
boolean isSuccess = mapper.deleteUser(1);
openSession.commit();
System.out.println(isSuccess);
} finally {
openSession.close();
}
}
}
代码位置:https://gitee.com/crazywsp/JavaImprove/tree/master/MybatisRepo/mybatis-Hellowold
7.总结
1.SqlSession代表和数据库的一次会话,用完必须关闭;
2.SqlSession和connection一样都是非线程安全,每次使用都应该去获取新的对象;