mybatis入门
流程:(看官网开发文档),搭建环境,导入依赖,编写代码,测试
导入依赖包:mybatis和mysql-connector-java
注意maven中的build:
```xml
<!--防止在编译的时候,不导出java文件夹下的mapper.xml文件 -->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
```
编写mybatis工具类
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;
/**
* @Author: nsk
* @Description:
* @Date: create in 2021/3/31 17:29
*/
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static{
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//openSession参数为true,当创建session的时候,执行insert update delete将自动commit 开发尽量不用自动提交
public static SqlSession getSession(){
return sqlSessionFactory.openSession(true);
}
}
根据工具类编写配置文件
<?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"/>
<!--mybatis设置-->
<settings>
<!--文档官网查看功能解释https://mybatis.org/mybatis-3/zh/configuration.html#settings-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<!--日志打印,可设置别的日志,参考官网文档-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--可设置别名-->
<typeAliases>
<!--规定javaBean的别名,可在mapper.xml中直接使用别名-->
<!-- <typeAlias type="pojo.User" alias="User"/>-->
<!--自动扫描包,包下的javaBean自动设置别名,使用时使用类名的首字母小写即可,可用注解@Alis方式给Javabean起别名-->
<package name="pojo"/>
</typeAliases>
<!--default使用id为development的environment,可修改为test-->
<environments default="test">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<!--数据源-->
<dataSource type="POOLED">
<!--虽然引用了外部文件,但是还是可以使用property标签,若有相同的,优先使用外部文件-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 每个Mapper.xml都需要在此配置文件中注册! -->
<mappers>
<!--法一-->
<!--<mapper resource="dao/UserMapper.xml"/>-->
<!--法二:注意此方式,一定要把mapper.xml和mapper接口放到一个包中且必须要同名!-->
<!--<mapper class="dao.UserMapper"/>-->
<!--法三:注意此方式,一定要把mapper.xml和mapper接口放到一个包中且必须要同名!-->
<package name="dao"/>
</mappers>
</configuration>
根据编写的配置文件,编写外部配置文档db.properties和日志打印配置文件log4j.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=123456
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=./log/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ./log/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=./log/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =./log/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
写实体类,接口类,mapper.xml
实体类
package pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.ibatis.type.Alias;
/**
* @Author: nsk
* @Description:
* @Date: create in 2021/3/31 18:25
*/
//这里注释是在mybatis配置文件中设置typeAliases
@Alias("user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private String password;
}
编写接口类
package dao;
import pojo.User;
import java.util.List;
import java.util.Map;
/**
* @Author: nsk
* @Description:
* @Date: create in 2021/3/31 19:16
*/
public interface UserMapper {
List<User> getUsers();
List<User> getUsersLike(String value);
User getUserById(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);
int addUsers(Map<String, Object> map);
List<User> getUserByPage(Map<String,Object> map);
}
编写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可以使用mybatis-config中的alis别名-->
<mapper namespace="dao.UserMapper">
<!-- 防止字段名和属性对不上法一,映射数据库某个字段和javaBean属性-->
<!-- type使用user是因为mybatis-config.xml中开启了别名扫描包启用了注解方式的别名-->
<!--column 要查询的表的表头,property是我们要返回的数据的属性名,此property需要跟javaBean中的属性名相同-->
<resultMap id="UserMap" type="user">
<result column="pwd" property="password" />
</resultMap>
<!--查询语句,id相当于dao的实现类中的方法名字,resultType返回的是什么对象-->
<select id="getUsers" resultMap="UserMap">
select * from user
</select>
<!-- 防止字段名和属性对不上法二,设置返回的内容 -->
<!--
<select id="getUsers" resultType="user">
select id,name,pwd as password from user
</select>
-->
<select id="getUsersLike" resultType="pojo.User" >
select * from user where name like #{value}
</select>
<select id="getUserById" resultType="pojo.User" parameterType="int">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="pojo.User">
insert into user value (#{id},#{name},#{pwd})
</insert>
<insert id="addUsers" parameterType="map">
insert into user value (#{uid},#{uname},#{upwd})
</insert>
<update id="updateUser" parameterType="pojo.User">
update user set name=#{name},pwd=#{pwd} where id = #{id};
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<!--分页查询-->
<select id="getUserByPage" resultType="user" parameterType="map">
select * from user limit #{beginIndex},#{pageSize}
</select>
</mapper>
测试
package dao;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;
import pojo.User;
import utils.MybatisUtil;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author: nsk
* @Description:
* @Date: create in 2021/3/31 18:40
*/
public class UserMapperTest {
@Test
public void test(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsers();
for (User u : users){
System.out.println(u);
}
sqlSession.close();
}
@Test
public void testLike(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsersLike("%2%");
for (User u : users){
System.out.println(u);
}
sqlSession.close();
}
@Test
public void test2(){
SqlSession session = MybatisUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User userById = mapper.getUserById(1);
System.out.println(userById);
session.close();
}
@Test
public void testInsert(){
SqlSession session = MybatisUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User u = new User(4,"nsk","123546");
int i=mapper.addUser(u) ;
System.out.println(i);
if (i>0) session.commit();
session.close();
}
@Test
public void testInsert2(){
SqlSession session = MybatisUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<String, Object>();
map.put("uid",5);
map.put("uname","nsk");
map.put("upwd","213");
map.put("uid",6);
map.put("uname","nsk6");
map.put("upwd","2136");
int i=mapper.addUsers(map) ;
System.out.println(i);
if (i>0) session.commit();
session.close();
test();
}
@Test
public void testUpdate(){
SqlSession session = MybatisUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User u = new User(2,"nsk222","123546");
int i=mapper.updateUser(u) ;
System.out.println(i);
if (i>0) session.commit();
session.close();
test();
}
@Test
public void testDetele(){
SqlSession session = MybatisUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
int i=mapper.deleteUser(1) ;
System.out.println(i);
if (i>0) session.commit();
session.close();
test();
}
static Logger logger = Logger.getLogger(UserMapperTest.class);
@Test
public void testLog(){
logger.debug("debug");
logger.error("error");
logger.info("info");
}
@Test
public void TestPage(){
SqlSession session = MybatisUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<String, Object>();
map.put("beginIndex",0);
map.put("pageSize",2);
List<User> user=mapper.getUserByPage(map);
for (User u : user)
System.out.println(u);
session.close();
test();
}
}