使用mybatis连接数据库-
实现mybatis连接数据库的步骤:
1.建表
2.pom.xml的配置
<?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.cqust</groupId>
<artifactId>ch02-动态代理</artifactId>
<version>1.0-SNAPSHOT</version>
<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>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<!--指定去哪拷贝-->
<directory>src/main/java</directory>
<includes>
<!--指定拷贝什么文件-->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!--当配置了src/main/java下的就不会拷贝resource下的文件了所以还需要配置一下-->
</resources>
</build>
</project>
3.创建实体类在domain包下
package com.cqust.domain;
/**
*实体类属性要求和表中的名字一致,类型也一致
*/
public class Dept {
private Integer deptno;
private String dname;
private String loc;
public Dept(Integer deptno, String dname, String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "Dept{" +
"deptno=" + deptno +
", dname="" + dname + """ +
", loc="" + loc + """ +
"}";
}
}
4.创建dao接口
package com.cqust.dao;
import com.cqust.domain.Dept;
import java.util.List;
/**
* 定义访问数据库的方法,增删改查
*/
public interface DeptDao {
public List<Dept> selectDept();
public int insertDept(Dept dept);
public int deleteDept(Integer deptno);
public int updateDept(Dept dept);
}
5.创建mybatis配置文件
sql映射文件,写sql语句的,一个表一个sql映射文件,在接口所在的目录下
文件名和接口一致
<?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.cqust.dao.DeptDao">
<!--sql映射文件写sql语句的
namespace:接口的全限定名称
id:执行sql的唯一标识
resultType:结果类型,是sql语句执行后得到resultSet,遍历数组得到
每个java对象的类型
-->
<select id="selectDept" resultType="com.cqust.domain.Dept">
select deptno,dname,loc from dept
</select>
<insert id="insertDept">
insert into dept (deptno,dname,loc) values (#{deptno},#{dname},#{loc})
</insert>
<delete id="deleteDept">
delete from dept where deptno = #{deptno}
</delete>
<update id="updateDept">
update dept set dname = #{dname},loc=#{loc} where deptno = #{deptno}
</update>
</mapper>
6.创建主配置文件:
一个项目一个主配置文件,提供数据库连接信息,和sql映射文件的信息
<?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>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<environments default="myenv"><!--default值为一个env的id-->
<environment id="myenv">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/cqust_db2"/>
<property name="username" value="root"/>
<property name="password" value="hch1"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/cqust/dao/DeptDao.xml"/>
<!--一个mapper标签指定一个sql映射文件
路径从类路径开始classes
-->
</mappers>
</configuration>
<!--mybatis的主配置文件:定义了数据库连接信息,sql映射文件位置信息。-->
7.将创建SqlSession进行了封装
package com.cqust.util;
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.InputStream;
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory = null;
static {
String config = "mybatis.xml";
InputStream in = null;
try {
in = Resources.getResourceAsStream(config);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
}
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
if (sqlSessionFactory != null){
sqlSession = sqlSessionFactory.openSession(true);
}
return sqlSession;
}
}
8.测试类:
package com.cqust;
import com.cqust.dao.DeptDao;
import com.cqust.domain.Dept;
import com.cqust.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class MyTest {
@Test
public void testSelectDept(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
DeptDao deptDao = sqlSession.getMapper(DeptDao.class);
System.out.println("==="+deptDao);//org.apache.ibatis.binding.MapperProxy@a86356
List<Dept> deptList = deptDao.selectDept();
for (Dept dept : deptList) {
System.out.println(dept);
}
sqlSession.close();
}
9.查询结果:
工程结构:
总结:整个项目需要注意的小知识点!!!
(1).如果xml文件在运行时没有或者找不到,看是不是没有配置插件
<resource>
<!--指定去哪拷贝-->
<directory>src/main/java</directory>
<includes>
<!--指定拷贝什么文件-->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!--当配置了src/main/java下的就不会拷贝resource下的文件了所以还需要配置一下-->
如果没有配置可能会存在找不到xml,可以先在target目录中找一下,如果很多方法都试过还是不行
直接暴力复制粘贴就行。把工程下的xml文件复制到target目录下的指定位置。
(2).有两个xml文件一个在classes下,一个在,dao下,这是比较容易出错的地方。
(3).DeptDao deptDao = sqlSession.getMapper(DeptDao.class);
这里我们直接获取到代理对象来执行方法,接口的实现类交给mybatis来做,这里直接使用就可以了,不用关心底层原理。