IDEA使用Maven配置Mybatis
配置数据库
首先下载MySQL,我这里是最新版8.0.20
在Maven中根据你的Sql版本引入两个包,一个是MyBatis,一个是Sql驱动。注意:这两个包的版本一定要与你的mybatis和sql相同
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
IDEA已经集成了数据库管理系统,我们可以不使用Navicat Premium 了。点击右侧数据库,选择MySQL。
添加Maven导入的Driver包,找不到的话可以在Maven中右键复制路径。
点击Driver上面的Project Data Sources中新建的mysql。输入账号密码,点击Test Connection。配置成功的话会有√。
新建一个模式,我命名为schema_person。
再右键这个schema,建立一个表。再右键这个表建立三列数据
全部完成后结构是这样的
插入一条数据
双击表名,点击加号添加一条数据
配置Mybatis
新建一个maven项目,添加代码模板,模板中的代码复制后别忘更改Extension拓展名为xml,点击Apply。
复制此段代码模板,下面详细讲解
<?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="${packagename}"/> <!--在包中寻找所需的类,Mapper中不用写全称-->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- mysql的驱动,这里注意JDK1.6以上使用cj版本的驱动-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!-- schema_person是模式名,cj版本的驱动必须提前设置好时区-->
<property name="url" value="jdbc:mysql://localhost:3306/${schema}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 在mapper文件中寻找语句映射-->
<mappers>
<mapper resource="${Mapper}"/>
</mappers>
</configuration>
参数讲解:
- environment:你可以创建多个环境,比如测试环境,运行环境。通过defauft或者Reader切换。
- dataSource type:
- POOLED:连接池方式,每次从链接池中取出链接执行。不需要打开和关闭数据库。
- UNPOOLED:JDBC方式,不推荐。每次需要重新打开数据库,很消耗性能。
- JNDI:TomCat自带连接池
- transactionManager:事务提交方式
- JDBC:JDBC方式手动提交事务
- MANAGED: 事务由其它组件去托管(spring,jboss)。默认使用完成连接后自动关闭链接。
在resource文件夹中建立名为conf的Mybatis配置文件,为什么一定要放在resources文件夹中呢?
IDEA的maven项目中,默认源代码目录下(src/main/java
目录)的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹。maven工具默认在编译的时候,会将resources文件夹中的资源文件一块打包进classes目录中。
在resources中建立xxxMapper.xml映射文件,这里我们写入一条查询语句。
注意由于是基本类型。传入参数括号中的占位符可以不是id。
在conf中映射文件定位,这句就是告诉sql执行的语句在哪。
测试SQL
新建一个Person类,生成简单java类。
public class Person {
int id;
String name;
int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
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;
}
}
再新建一个名为TestMybatis类
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 TestMybatis {
public static void main(String[] args) throws IOException {
//加载mybatis配置文件
Reader reader= Resources.getResourceAsReader("conf.xml");//得到配置文件
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession(); //得到session
String statement="com.cztcode.mybatis.PersonMapper.queryPersonById"; //执行的语句
Person person=sqlSession.selectOne(statement,1); //第一个参数
System.out.println(person.toString());
sqlSession.close();
}
}
输出结果
这样实现的方式是基础方式,除此之外CRUD的代码为
和上面的方式是类似的,这里不再详述了。
<?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.cztcode.mybatis.PersonMapper">
<select id="queryPersonById" parameterType="int" resultType="Person">
select * from Person where id = #{id}
</select>
<insert id="addPerson" parameterType="Person">
insert into person(id,name,age) values (#{id},#{name},#{age})
</insert>
<update id="updatePerson" parameterType="Person">
update person set id= #{id}, name=#{name},age=#{age} where id=#{id}
</update>
<delete id="deletePersonById" parameterType="int">
delete from person where id=#{id}
</delete>
<select id="queryAllPerson" parameterType="int" resultType="Person">
select * from Person
</select>
</mapper>
String statement01="queryPersonById"; //执行的语句
Person person01=sqlSession.selectOne(statement01,1); //第一个参数
System.out.println(person01.toString());
String statement02="com.cztcode.mybatis.PersonMapper.queryAllPerson";
List<Person> person02= sqlSession.selectList(statement02);
for(Person it:person02){
System.out.println(it.toString());
}
Person person =new Person(3,"Shi",20);
String statement03 ="addPerson";
int count=sqlSession.insert(statement03,person);
sqlSession.commit();
System.out.println(count);
String statement04="deletePersonById";
sqlSession.delete(statement04,3);
sqlSession.commit();
Person person =new Person(2,"Tao",23);
String statement05= "updatePerson";
sqlSession.update(statement05,person);
sqlSession.commit();