JAVA学习总结(四)
关于Mybatis,一点想说的东西
Mybatis
平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statment, ResultSet 这些其实只是手段的辅助类。 不仅如此,访问不同的表,还会写很多雷同的代码,显得繁琐和枯燥。
那么用了Mybatis之后,只需要自己提供SQL语句,其他的工作,诸如建立连接,Statement, JDBC相关异常处理等等都交给Mybatis去做了,那些重复性的工作Mybatis也给做掉了,我们只需要关注在增删改查等操作层面上,而把技术细节都封装在了我们看不见的地方。
准备工作
在使用Mybatis之前,我们需要先做一些准备。
首先,我们要把数据库先建好,这里我用的是mysql8.0
,关于mysql的下载安装这里就不说了,网上可以找一下。
先创建数据库demo
create database demo;
建个表
use demo;
CREATE TABLE category_ (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
name varchar(32) DEFAULT NULL
) ;
插入数据
INSERT INTO category_ VALUES (null,'category1');
INSERT INTO category_ VALUES (null,'category2');
创建项目
建好了表以后,就去IDEA创建项目了。我们先创建一个JAVA WEB项目,给项目添加两个jar包(在IDEA可以按快捷键ctrl+shift+alt+s
添加依赖)
jar包的话我放到
链接:https://pan.baidu.com/s/1BV0Es4oJBx2odLMaedZsyA
提取码:q1d9
然后我们在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>
<typeAliases>
<package name="demo.mybatis.cate"/>
</typeAliases>
<environments default="development">
<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/demo?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="demo/mybatis/cate/Category.xml"/>
</mappers>
</configuration>
-
typeAliases
为别名,自动扫描demo.mybatis.cate下的类型,使得在后续配置文件Category.xml中使用resultType的时候,可以直接使用Category,而不必写全demo.mybatis.cate.Category -
mappers
映射Category.xml
注意下这句<property name="url" value="jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8"/>
这是因为我用的mysql版本是8.0的,一些安全性要求变得更严格了,所有必要的参数要加上,在XML中&
也要用&
转义,要是mysql版本是5.6的则没有这些问题
接着在包demo.mybatis.cate下写Category.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="demo.mybatis.cate">
<insert id="addCategory" parameterType="Category" >
insert into category_ ( name ) values (#{name}) <!--#{name}会自动获取对象的name属性值-->
</insert>
<delete id="deleteCategory" parameterType="Category" >
delete from category_ where id= #{id}
</delete>
<select id="getCategory" parameterType="_int" resultType="Category">
select * from category_ where id= #{id}
</select>
<update id="updateCategory" parameterType="Category" >
update category_ set name=#{name} where id=#{id}
</update>
<select id="listCategory" resultType="Category">
select * from category_
</select>
<!--模糊查找-->
<select id="listCategoryByName" parameterType="string" resultType="Category">
select * from category_ where name like concat('%',#{0},'%')
</select>
<!--多条件查找-->
<select id="listCategoryByIdAndName" parameterType="map" resultType="Category">
select * from category_ where id> #{id} and name like concat('%',#{name},'%')
</select>
</mapper>
- 命名空间是demo.mybatis.cate,在后续调用sql语句的时候,会用到它
- 里面定义了一条sql语句
- id——进行标示以供后续代码调用
- resultType—— 表示返回的数据,和Category关联起来
- parameterType——参数类型,常见都会写成类,更多可以再查
我这个配置文件里是写了很多条语句的,多余的可以忽略
测试
最后我们再写个测试类
有个实体类
public class Category {
private int id;
private String name;
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;
}
}
测试
package demo.mybatis.controller;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 demo.mybatis.cate.Category;
public class TestMybatis {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();
List<Category> cs=session.selectList("listCategory");
for (Category c : cs) {
System.out.println(c.getName());
}
}
根据配置文件mybatis-config.xml得到Session
通过session的selectList方法,调用sql语句listCategory
执行完毕之后,得到一个Category集合,遍历即可看到数据
过程中可能会遇到各种奇怪的问题,不慌,有问题就多查一查,也欢迎来交流,共同进步。