新建数据库my_db,新建表student_tb

id为主键,不自动递增
下载MyBatis
https://github.com/mybatis/mybatis-3/releases

解压。
新建Java项目,什么都不用勾选(如果要在IDEA中操作数据库,可勾选SQL Support)。

勾选后,IDEA右侧会有一个Database的工具,可在IDEA中直接操作数据库。

导入mybatis所有的jar包、数据库驱动

mybatis.jar是必需的。
lib是mybatis依赖的第三方jar包,根据需要选择,嫌麻烦或者小白,可全部导入lib中的jar。
pdf是mybatis的文档。
设置MyBatis的日志
在src下新建文件 log4j.properties ,内容如下:
# Global logging configuration
log4j.rootLogger=ERROR, stdout,A
# 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
# File output...
log4j.appender.A = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File = D:/log.txt
log4j.appender.A.Append = true
log4j.appender.A.Threshold = ERROR
log4j.appender.A.layout = org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.A.encoding=UTF-8
可到 mybatis.pdf 8.1.1.2小节复制来修改。
src下新建包com.chy.pojo,包下新建POJO类Student:
package com.chy.pojo;
public class Student {
private int id;
private String name;
private int age;
private int score;
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;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
src下新建包com.chy.mapper,mapper下创建实体-数据表的映射文件 StudentMapper.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.chy.mapper.StudentMapper">
<insert id="insertStudent" parameterType="Student">
INSERT INTO student_tb(id,name,age,score)VALUES (#{id},#{name},#{age},#{score})
</insert>
<select id="queryById" parameterType="int" resultType="Student">
SELECT * FROM student_tb WHERE id=#{id}
</select>
<update id="updateStudent" parameterType="Student">
UPDATE student_tb SET name=#{name},age=#{age},score=#{score} WHERE id=#{id}
</update>
<delete id="deleteStudent" parameterType="int">
DELETE FROM student_tb WHERE id=#{id}
</delete>
</mapper>
可以到mybatis.pdf 2.1.5小节复制来修改。
我们把映射文件都放在mapper包下,常以 实体类名+Mapper 命名。
<mapper>的namespace常设置为此映射文件的路径。
通过id调用相应的sql语句,parameterType指定参数类型,resultType指定要把结果集记录映射到那种实体类(只有<select>有这个属性)。
#{}相当于sql语句中的占位符?,{}中写对应实体类的成员变量,会自动把参数转换为指定的成员变量。
src下新建数据库配置文件mysql.properties:
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT username=chy password=abcd
对应信息要换为自己的。
最好在文件名中注明是哪种数据库,如果公司要换数据库,比如从mysql换为oracle,好区分这个是哪个数据库的配置。
src下新建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>
<!--指定数据库配置文件的位置-->
<properties resource="mysql.properties"></properties>
<!--指定日志实现使用的是log4j-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--指定实体类-->
<typeAliases>
<typeAlias type="com.chy.pojo.Student" alias="Student"/>
</typeAliases>
<!--指定数据库配置文件中的变量名-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--指定映射文件的位置-->
<mappers>
<mapper resource="com/chy/mapper/StudentMapper.xml"/>
</mappers>
<!-- Continue going here -->
</configuration>
可到mybatis.pdf 2.1.2小节复制来改。
<configuration>的子元素是有一定顺序的,顺序不对会报红。
src下新建包com.chy.test,包下新建测试类Test:
package com.chy.test;
import com.chy.pojo.Student;
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.Reader;
public class Test {
public static void main(String[] args) throws IOException {
//加载mybatis的全局配置文件
String resources="mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resources);
//根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//通过SqlSessionFactory创建SqlSession
SqlSession sqlSession=sqlSessionFactory.openSession();
//增
Student student = new Student();
student.setId(1);
student.setName("chy");
//第一个参数对应映射文件中的id,通过id调用相应的sql语句,第二个参数是传给sql语句的
sqlSession.insert("insertStudent", student);
//修改数据库(增、删、改)后,需要commit()提交给数据库,才会同步本次会话做的修改。只有查询的,可以不commit()。
sqlSession.commit();
//关闭会话
sqlSession.close();
}
}
//改
Student student = new Student();
student.setId(1);
student.setName("chenghongyong");
sqlSession.update("updateStudent", student);
//查
Student student=sqlSession.selectOne("queryById", 1);
System.out.println(student);
如果本次session期间,只有查询,可以不用commit()。
//删
sqlSession.delete("deleteStudent", 1);
说明
(1)版本声明部分,最好不要复制其他人的,如果你和ta用的mybatis库版本不同,会出错。最好到mybatis.pdf中去复制。
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
(2)配置文件的文件名问题
log4j.properties这个文件名是约定的,不能自己取。
映射文件、数据库配置文件需要在mybatis全局配置文件中指定,它们的文件名可以自己取。
mybatis全局配置文件要在程序中指定,文件名可以自己取。
(3)配置文件的位置问题
配置文件必须放在资源根目录下。常见的做法有2种:
- 在项目的根目录下新建文件夹resource,右键标识为资源根目录

注意是Resource Root,不是Source Root。
在里面放配置文件:

- 也可以像demo中一样放置在src下,因为src就是默认的资源根目录。
mapper中的映射文件放哪儿都行,只要路径配置对得上就ok。
log4j.properties必须直接放在资源根目录下(不能放在子文件夹里)。
来源:https://www.cnblogs.com/chy18883701161/p/11335070.html