使用mybatis連線資料庫--針對小白
阿新 • • 發佈:2021-12-06
實現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來做,這裡直接使用就可以了,不用關心底層原理。