ssm框架中學習程序中較簡單的一個框架,
MyBatis (ibatis)是一款優秀的持久層框架,它支持定制化 SQL、存盤程序以及高級映射,MyBatis 避免了幾乎所有的 JDBC 代碼和手動設定引數以及獲取結果集,(百度百科)
也就是說mybatis使資料庫sql陳述句與Java代碼“分開”,降低耦合,并且對于資料庫陳述句的書寫也比傳統的jdbc要簡單許多,
使用

1. 創建一個maven專案,在pom檔案中匯入相關jar包依賴,獲取mybatis,SQL server資料庫驅動jar包
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>7.0.0.jre10</version> </dependency>
2. 創建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> <environments default="sql"> <environment id="sql"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=TestData"/> <property name="username" value="sa"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/cheng/dao/UserMapper.xml"/> </mappers> </configuration>
Mybatis默認的事務管理器就是 JDBC , 連接池 : POOLED
MyBatis 的組態檔包含了會深深影響 MyBatis 行為的設定和屬性資訊,
configuration(配置)
properties(屬性)
settings(設定)
typeAliases(型別別名)
typeHandlers(型別處理器)
objectFactory(物件工廠)
plugins(插件)
environments(環境配置)
environment(環境變數)
transactionManager(事務管理器)
dataSource(資料源)
databaseIdProvider(資料庫廠商標識)
mappers(映射器)
例:typeAliases(型別別名)設定
<!-- 定義 別名 --> <typeAliases> <!--單個別名的定義 alias:別名,type:別名映射的型別 --> <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --> <!-- 批量別名定義 指定包路徑,自動掃描包下邊的pojo,定義別名,別名默認為類名(首字母小寫或大寫) --> <package name="com.cheng.pojo"/> </typeAliases>
若批量定義別名后,mapper映射檔案中,
<-- 未定義別名--> <select id="getUserList" resultType="com.cheng.pojo.User"> select * from sqldata </select> <insert id="addUser" parameterType="com.cheng.pojo.User"> insert into sqldata (id,name,pwd) values(#{id},#{name},#{pwd}); </insert> <--已定義別名 --> <select id="getUserList" resultType="User"> select * from sqldata </select> <insert id="addUser" parameterType="User"> insert into sqldata (id,name,pwd) values(#{id},#{name},#{pwd}); </insert>
例:通過properties屬性來實作參考組態檔(連接資料庫)
連接SQL server資料庫的 db.properties
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;databaseName=TestData
username=sa
password=123456
連接mysql資料庫的 db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?useSSL=false&serverTimezone=UTC
username=root
password=123456
參考.properties檔案
...... ...... <properties resource="db.properties"/> <environments default="sql"> <environment id="sql"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> ...... ......
例:mappers(映射器)
<!--每一個Mapper.XML都需要在Mybatis核心組態檔中注冊!--> <-- 方式一: 【推薦使用】--> <mappers> <mapper resource="com/cheng/dao/UserMapper.xml"/> </mappers> <-- 方式一: 使用class檔案系結注冊--> <mappers> <mapper class="com.cheng.dao.UserMapper"/> </mappers>
3. 撰寫mybatis工具類
//sqlSessionFactory --> sqlSession public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static{ try { //使用Mybatis第一步:獲取sqlSessionFactory物件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顧名思義,我們就可以從中獲得 SqlSession 的實體了, // SqlSession 完全包含了面向資料庫執行 SQL 命令所需的所有方法, public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
4. pojo層撰寫物體類,類實體域要與資料庫中列中屬性相對應,名稱相同(不相同也可以)
package com.cheng.pojo; import lombok.*; @Setter //生成set方法,final變數不包含 @Getter //生成get方法,final變數不包含 @AllArgsConstructor //生成所有引數的構造方法 /* @NoArgsConstructor //生成無參構造方法 @ToString //生成所有屬性的toString()方法 @EqualsAndHashCode //生成生成equals()方法和hashCode方法 @Data //包括@Setter/@Getter,@ToString ,@EqualsAndHashCode,@RequiredArgsConstructor @RequiredArgsConstructor //生成一個包含 "特定引數" 的構造器,特定引數指的是那些有加上 final 修飾詞的變數. // 如果所有的變數都是正常的,都沒有用 final 修飾的話,那就會生成一個沒有引數的構造器 */ public class User { private int id; private String name; private String pwd; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name.trim() + '\'' + ", pwd='" + pwd.trim() + '\'' + '}'; } }
5. dao層介面,并撰寫映射檔案 UserDao.xml(介面實作類由原來的UserDaoImpl轉變為一個 Mapper組態檔)
package com.cheng.dao; import com.cheng.pojo.User; import java.util.List; public interface UserDao { //查詢全部資訊 List<User> getUserList(); //根據id查詢 List<User> getUserListById(int id); //插入資訊 void addUser(User user); //修改用戶 void updateUser(User user); //洗掉用戶 void deleteUser(int id); }
映射檔案
namespace中的包名要和 Dao/mapper 介面的包名一致!
id : 就是對應的namespace中的方法名,
resultType:Sql陳述句執行的回傳值,
parameterType : 引數型別,
<?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.cheng.dao.UserDao"> <select id="getUserList" resultType="com.cheng.pojo.User"> select * from sqldata </select> <select id="getUserListById" resultType="com.cheng.pojo.User" parameterType="int"> select * from sqldata where id=#{id} </select> <insert id="addUser" parameterType="com.cheng.pojo.User"> insert into sqldata (id,name,pwd) values(#{id},#{name},#{pwd}); </insert> <update id="updateUser" parameterType="com.cheng.pojo.User"> update sqldata set name=#{name},pwd=#{pwd} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from sqldata where id=#{id}; </delete> </mapper>
單元測驗
import com.cheng.pojo.User; import com.cheng.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class JTest { @Test public void test(){ //第一步:獲得SqlSession物件 SqlSession sqlSession; sqlSession = MybatisUtils.getSqlSession(); //方式一:getMapper UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); for (User user : userList) { System.out.println(user); } //關閉SqlSession sqlSession.close(); } @Test public void test2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userListById = mapper.getUserListById(1); System.out.println(userListById); sqlSession.close(); } //增刪改需要提交事務 @Test public void test3(){ SqlSession sqlSession =MybatisUtils.getSqlSession(); UserDao userDao=sqlSession.getMapper(UserDao.class); userDao.addUser(new User(3,"YuQingSong","123456")); sqlSession.commit(); //提交事務 sqlSession.close(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95087.html
標籤:Java
下一篇:封裝MyBatis輸出結果
