1、MyBatis框架
注:本文仅提供作者自己查阅使用
1.1、准备
导入MyBati、log4j以及 mysql 驱动 相关的jar包
规范:
-
MyBatis配置文件一般建议使用 mybatis-config.xml文件
文件位置
整个结构:
tips:这里的小鸟是装了一个叫 MyBatisX 的一个插件
1.2、编写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="dev">
<!--事务管理器-->
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<!--数据源-->
<dataSource type="POOLED">
<!--注册驱动类-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--连接数据库-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis-demo"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--关联外部 mapper.xml-->
<mappers>
<mapper resource="pojo/UserMapper.xml"></mapper>
</mappers>
</configuration>
1.3、log4j日志配置文件
log4j日志配置文件,此配置文件在出现错误,或者异常的时候打印日志信息
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=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
1.4、编写关联外部的 xml文件、接口、以及实体类
关联外部 .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="mapper.UserMapper">
<select id="selectUserById" parameterType="int" resultType="pojo.User">
select * from user where id = #{id};
</select>
<!--查询用户列表-->
<select id="selectUserList" resultType="pojo.User">
select * from user;
</select>
<!--模糊查询-->
<!--
#和$符号的区别:#是用到预编译模板来进行里面的值替换,也就是? $是直接替换,里面的值,你传什么过来我就替换成什么
<select id="selectUserLikeUserName" parameterType="String" resultType="pojo.User">
select * from `user` where username like #{username};
</select>
-->
<select id="selectUserLikeUserName" parameterType="String" resultType="pojo.User">
select * from `user` where username like '%${value}%';
</select>
<!--添加用户-->
<!--
<insert id="addUser" parameterType="pojo.User">
insert into user(username,password)values(#{username},#{password});
</insert>
-->
<insert id="addUser" parameterType="java.util.Map">
insert into user(username,password)values(#{username},#{password});
</insert>
<!--修改用户-->
<update id="updateUser" parameterType="pojo.User">
update user set username = #{username},password = #{password} where id = #{id};
</update>
<!--删除用户-->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id};
</delete>
</mapper>
UserMapper接口
package mapper;
import org.apache.ibatis.annotations.Param;
import pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//根据id来查询数据
User selectUserById(int id);
List<User> selectUserList();
List<User> selectUserLikeUserName(String username);
// Integer addUser(User user);
Integer addUser(@Param(value = "username") String name,@Param(value = "password") String pwd);
// Integer addUser(Map<String, Object> map);
Integer updateUser(User user);
Integer deleteUser(int id);
}
User实体类
package pojo;
public class User {
private Integer id;
private String username;
private String password;
public User() {
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
实体类对应库中的表
1.5、封装 MyBatis 工具类
MyBatisUtils
package utils;
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;
/**
* MyBatis封装工具类
* @author 三七
*/
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
//MyBatis 核心配置文件名称
String config = "mybatis-config.xml";
InputStream is = null;
try {
is = Resources.getResourceAsStream(config);
} catch (IOException e) {
e.printStackTrace();
}
//创建工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}
//获取SqlSession
public static SqlSession getSqlSession(){
//openSession() 里面可以不写true,不写则默认为 false 需要手动提交事务,手动提交事务需要调用 commit()方法,否则,处理的数据,不会持久化到数据库中。
return sqlSessionFactory.openSession(true);//写 true 代表自动管理事务
}
//释放资源
public static void closeSqlSession(SqlSession sqlSession){
if (sqlSession != null){
sqlSession.close();
}
}
}
1.6、测试
Demo
package demo;
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.MyBatisUtils;
public class Demo {
@Test
public void fun(){
//封装工具类后,就可以直接拿到 SqlSession 对象
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//获取 UserMapper 接口
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用方法,执行依赖的 sql 语句
User user = userMapper.selectUserById(1);
System.out.println(user);
}
}