纯新手,打算学习下mybatis的用法,在官网和教程上看了资料,整理下笔记。
既然是从零开始,就是不依赖任何框架和模板,从空白项目开始。在IDEA上先新建一个空的java项目。
1. 添加项目依赖
需要依赖两个包, 一个是mybatis,一个是mariadb的驱动包。
mybatis的jar包自己从官网或者maven上下好,然后加入到项目的依赖中去,具体设置如下:
2. 增加配置文件
然后加入一个mybatis的config文件。这个文件主要建立和数据库的联系。 文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
上面driver要注意,我的数据是mariadb,所以driver用的 org.mariadb.jdbc.Driver。如果更换数据库的需要设置成对应的driver。
3. 增加mapping文件
<?xml version="1.0" encoding="UTF-8" ?>
4. 代码测试数据库连接
数据库中现有数据如下:
对应的实体类定义如下:(这块儿我偷懒用了lambok注解, 要生效的话需要在 File-> Setting-> Build -> Compiler -> Annotation Processors 面板里选中Enable annotation processing)
@Builder
数据库的查询代码如下:
public
运行后结果如下:
Student(id=1, firstName=zhou, lastName=zhe, age=20, man=false)
Student(id=2, firstName=feng, lastName=hao, age=23, man=true)
5. 数据库的增删改查
丰富mapping的操作, 增加对 增删改查的映射。
<?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="ljw"> <!-- 命名空间,名字可以随意起,只要不冲突即可 -->
<!-- 对象映射,可以不写 -->
<!-- 查询功能,resultType 设置返回值类型 -->
<select id="findAll" resultType="com.ljw.Student"> <!-- 书写 SQL 语句 -->
SELECT * FROM Student
</select>
<insert id="insertStu">
insert into student(firstName, lastName, age, man)
values (#{firstName},#{lastName},#{age},#{man})
</insert>
<update id="updateStu">
update student
set firstName = #{firstName}, lastName=#{lastName}, age = #{age}, man = #{man}
where id = #{id};
</update>
<delete id="deleteStu">
delete from Student where id = #{id}
</delete>
</mapper>
然后在代码中调用就可以了
public class Main {
public static void printRet(SqlSession sess) {
// 查询
List<Student> students = sess.selectList("ljw.findAll");
for (Student stu: students) {
System.out.println(stu.toString());
}
}
public static void main(String[] args) throws Exception {
String resource = "com/ljw/mybatis-cfg.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
try(SqlSession sess = sqlSessionFactory.openSession()) {
// 查询
printRet(sess);
// 增加一个学生
System.out.println("增加一个学生");
Student stu = Student.builder().firstName("huang")
.lastName("he")
.age(30)
.man(true)
.build();
sess.insert("ljw.insertStu", stu);
printRet(sess);
// 删除一个学生
System.out.println("删除一个学生");
stu.id = 2;
sess.delete("ljw.deleteStu", stu);
printRet(sess);
// 更新一个学生
System.out.println("改一个学生");
stu.setFirstName("liu");
stu.setId(1);
System.out.println(stu.toString());
sess.update("ljw.updateStu", stu);
printRet(sess);
}
}
}
运行结果如下:
Student(id=1, firstName=zhou, lastName=zhe, age=20, man=false)
Student(id=2, firstName=feng, lastName=hao, age=23, man=true)
增加一个学生
Student(id=1, firstName=zhou, lastName=zhe, age=20, man=false)
Student(id=2, firstName=feng, lastName=hao, age=23, man=true)
Student(id=12, firstName=huang, lastName=he, age=30, man=true)
删除一个学生
Student(id=1, firstName=zhou, lastName=zhe, age=20, man=false)
Student(id=12, firstName=huang, lastName=he, age=30, man=true)
改一个学生
Student(id=1, firstName=liu, lastName=he, age=30, man=true)
Student(id=1, firstName=liu, lastName=he, age=30, man=true)
Student(id=12, firstName=huang, lastName=he, age=30, man=true)