一、使用meavn创建项目,并导入相应的包
<?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>me.mybatis</groupId>
<artifactId>mybatis-study1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 日志文件管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
</dependencies>
</project>
二、创建数据库和表,针对MySQL数据库
create database mybatis;
use mybatis;
CREATE TABLE `User` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `User` VALUES (1, 'test', 18);
INSERT INTO `User` VALUES (2, '张三', 25);
三、添加Mybatis的配置文件
1、在src/main/resources
下创建mysql.properties
文件,代码如下
properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.0.111:3306/mybatis
jdbc.username=root
jdbc.password=root
2、在src/main/resources下创建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="mysql.properties"/>
<settings>
<!--全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载,默认值为false-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。默认值为true-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!--对事务的管理和连接池的配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"><!--POOLED:使用Mybatis自带的数据库连接池来管理数据库连接-->
<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>
</configuration>
四、创建数据库表对应的实体类
在src/java下新建一个包me.mybatis.entity
,然后在该包下创建一个java
文件,文件名User
,增加代码如下 :
package me.mybatis.entity;
/**
* User 表所对应的实体类
*/
public class User {
//实体类的属性和表的字段名称一一对应
private int id;
private String name;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
五、创建接口并添加注解
在src/java下新建一个包me.mybatis.dao
,然后在该包下创建一个java
接口文件,文件名IUser
,增加代码如下 :
package me.mybatis.dao;
import me.mybatis.entity.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface IUser {
@Select("select * from User where id = #{id}")
public User getUserById(int id);
@Select("select * from User")
public List<User> getUserList();
@Insert("insert into User (name, age) values (#{name}, #{age})")
public void insertUser(User user);
@Update("update User set name = #{name}, age = #{age} where id = #{id}")
public void updateUser(User user);
@Delete("delete from User where id = #{id}")
public void deleteUser(int userId);
}
与
User.java
对应的 XML 配置文件UserMapper.xml
可以省略,不用创建,即:使用注解方式,不需要配置 SQL映射文件
UserMapper.xml
六、编写测试类
在src/main/resources
下创建一个文件夹mapper,在该文件夹下创建一个UserMapper.xml
文件,代码如下
package me.mybatis.test;
import me.mybatis.dao.IUser;
import me.mybatis.entity.User;
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.Reader;
import java.util.List;
public class UserTest {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
String resource = "mybatis-config.xml";
reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//使用注解时,不需要使用SQL映射文件,但是需要在此添加接口类。
sqlSessionFactory.getConfiguration().addMapper(IUser.class);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// 用户数据列表
getUserList();
// 插入数据
// testInsert();
// 更新用户
// testUpdate();
//删除数据
// testDelete();
}
private static void getUserList() {
SqlSession session = sqlSessionFactory.openSession();
IUser iUser = session.getMapper(IUser.class);
List<User> users = iUser.getUserList();
for (User user : users){
System.out.println(String.format("[%d, %s, %d]", user.getId(), user.getName(), user.getAge()));
}
}
private static void testInsert() {
SqlSession session = sqlSessionFactory.openSession();
IUser iUser = session.getMapper(IUser.class);
User user = new User();
// 设置id和不设置id都一样,自动增加
// user.setId(10);
user.setName("Lili");
user.setAge(25);
iUser.insertUser(user);
// 一定要进行commit,否则操作失败
session.commit();
getUserList();
}
private static void testUpdate() {
SqlSession session = sqlSessionFactory.openSession();
IUser iUser = session.getMapper(IUser.class);
User user = iUser.getUserById(2);
user.setName("Luxi");
iUser.updateUser(user);
session.commit();
getUserList();
}
private static void testDelete() {
SqlSession session = sqlSessionFactory.openSession();
IUser iUser = session.getMapper(IUser.class);
iUser.deleteUser(2);
session.commit();
getUserList();
}
}