项目结构
pom依赖
<?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.msb</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mybatis Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<finalName>mybatis</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
MyBatis配置:sqlMapConfig.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" >
<!--配置文件官方说明:https://mybatis.org/mybatis-3/zh/configuration.html#environments-->
<configuration>
<!--配置文件标签必须按照顺序定义,否则会报错-->
<!--引用外部配置文件,并自定义属性:加载顺序:property, resource,方法参数 后面覆盖前面同名属性 -->
<!-- <properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>-->
<settings>
<!--没有指定,会自动查找-->
<setting name="logImpl" value="LOG4J"></setting>
</settings>
<!--类型别名-->
<typeAliases>
<!--没有指定alias,别名默认为首字母小写-->
<typeAlias type="com.msb.pojo.Person" alias="person"></typeAlias>
<!--扫描对应package,类上增加@Alias注解指定别名-->
<!--<package name="com.msb.pojo"></package>-->
</typeAliases>
<!--类型处理器(typeHandlers):需要自己定义:继承 BaseTypeHandler 类并添加@MappedJdbcTypes(JdbcType.VARCHAR) 注解-->
<!--<typeHandlers>
<typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>-->
<environments default="development">
<environment id="development">
<!--JDBC:自己手动管理事务;MANAGED:由spring容器管理事务-->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"></property>
<property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
</dataSource>
</environment>
</environments>
<mappers>
<!--目的是找到mapper.xml文件,如果是通过class或package找到对应的类或包下面的类,则是通过类名去找对应的mapper.xml文件-->
<!-- 使用相对于类路径的资源引用 -->
<!--<mapper resource="com/msb/mapper/PersonMapper.xml"></mapper>-->
<mapper class="com.msb.mapper.PersonMapper"/>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<!--<package name="com.msb.mapper"></package>-->
</mappers>
</configuration>
日志配置:log4j.properties
log4j.rootLogger=DEBUG,console,file
#打印到控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#打印到文件
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/mybatis01.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#打印sql
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
mapper.xml文件:
文件名称一定要和Mapper接口名称一致,目录结构也必须一致
<?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.msb.mapper.PersonMapper">
<!--void addPerson(Person person);-->
<insert id="addPerson" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into test_person
values (null, #{username}, #{age}, #{sale}, #{deptno})
</insert>
<!-- int updatePerson(Person person);-->
<update id="updatePerson">
update test_person
set sale = #{sale}
where username = #{username}
</update>
<update id="updatePerson3">
update test_person
<set>
<if test="age > 0">
age = #{age}
</if>
</set>
<where>
username = #{username}
</where>
</update>
<update id="updatePerson2">
update test_person
<trim prefix="set" suffixOverrides=",">
<if test="username != null">
username = #{username},
</if>
<if test="age > 0">
age = #{age},
</if>
</trim>
<trim prefix="where" prefixOverrides="and |or ">
<if test="username != null and username != ''">
and username = #{username}
</if>
<if test="age > 0">
and age = #{age}
</if>
</trim>
</update>
<!--int deletePerson(Person person);-->
<delete id="deletePerson">
delete
from test_person
where username = #{username}
</delete>
<!--Person selectPerson(String username, int age);-->
<select id="selectPerson" resultType="person">
select *
from test_person
where username = #{username}
and age = #{age}
<!--select * from test_person where username=#{param1} and age = #{param2}-->
</select>
<select id="selectPerson2" resultType="person">
select *
from test_person
<trim prefix="where" prefixOverrides="and |or ">
<if test="username != null">
and username = #{username}
</if>
<if test="age > 0">
or age = #{age}
</if>
</trim>
</select>
</mapper>
Mapper接口
package com.msb.mapper;
import com.msb.pojo.Person;
import org.apache.ibatis.annotations.Param;
/**
* @ClassName: PersonMapper
* @Description: TODO
* @Date: 2021/11/23 12:38
* @Author: wangdy001
* @Version: 1.0
*/
public interface PersonMapper {
Person selectPerson(@Param("username") String username, @Param("age") int age);
Person selectPerson2(@Param("username") String username, @Param("age") int age);
void addPerson(Person person);
int updatePerson(Person person);
int updatePerson2(Person person);
int updatePerson3(Person person);
int deletePerson(Person person);
}
测试代码:
package com.msb.test;
import com.msb.mapper.PersonMapper;
import com.msb.pojo.Person;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.InputStream;
/**
* @ClassName: Test01
* @Description: TODO
* @Date: 2021/11/23 13:06
* @Author: wangdy001
* @Version: 1.0
*/
public class Test01 {
private static SqlSession sqlSession = null;
@BeforeClass
public static void init() {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
InputStream systemResourceAsStream = ClassLoader.getSystemResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory build = sqlSessionFactoryBuilder.build(systemResourceAsStream);
sqlSession = build.openSession();
}
@Test
public void insert() {
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person = new Person();
person.setAge(10);
person.setDeptno(10);
person.setSale(10.0);
person.setUsername("小红");
mapper.addPerson(person);
sqlSession.commit();
System.out.println(person);
}
@Test
public void select() {
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person = mapper.selectPerson("小红", 10);
System.out.println(person);
}
@Test
public void select2() {
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person = mapper.selectPerson2("小红", 0);
System.out.println(person);
person = mapper.selectPerson2(null, 10);
System.out.println(person);
}
@Test
public void update2() {
Person person = new Person();
person.setUsername("小红");
person.setAge(10);
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
int i = mapper.updatePerson2(person);
System.out.println(i);
}
@Test
public void update3() {
Person person = new Person();
person.setUsername("小红");
person.setAge(10);
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
int i = mapper.updatePerson3(person);
System.out.println(i);
}
@BeforeClass
public static void destory() {
if (sqlSession != null) {
sqlSession.close();
}
}
}