使用 Mapper 介面的方式,不用寫介面實作類別,直接完成資料庫操作,簡單方便。 為了協助大家更好地學習Mapper介面,小編總結了一些關於Mapper介面的知識點,希望能夠協助到有需要的人。
先上結構圖:
下面是具體的代碼:
一、User.java
實體類中的的get/set方法以及構造方法及toString方法就不貼了public class User { private int id; private String name; private int age;}
二、UserMapper.java
這是mapper介面,面向介面編程的思想還是很重要的。也是本次博文最重要的部分。
介面定義有以下特點:
Mapper 介面方法名和 UserMapper.xml 中定義的每個 sql 的 id 同名。
Mapper 介面方法的輸入參數類型和 UserMapper.xml 中定義的 sql 的parameterType 類型相同。
Mapper 介面的傳回型別和 UserMapper.xml 中定義的 sql 的 resultType 類型相同
注意建立表的方法,有註解@Param
package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper { void createTable (@Param("tableName") String tableName); void add(User user); void del(int id); void update(User user); User getUser(int id); User[] list();}
三、userMappers.xml
這裡需要注意
1.xml檔案的namespace要寫成mapper介面的路徑,像下面.
<mapper namespace="com.mi.mapper.UserMapper">
2.在寫動態建立表的語句時,要寫成${tableName},而不是#{}. 點擊查看兩者的區別
create table ${tableName}...
下面是完整代碼:包括建立表、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,namespace的值習慣上設定成包名+sql對應檔名,這樣就能夠保證namespace的值是唯一的 --><mapper namespace="com.mi.mapper.UserMapper"> <!-- 建立表 --> <update id="createTable" parameterType="String"> create table ${tableName} (id int primary key auto_increment,name varchar(20),age int) </update> <!-- 添加資料 --> <insert id="add" parameterType="com.mi.beans.User"> insert into t_user(name,age) value(#{name},#{age}) </insert> <!-- 刪除資料 --> <delete id="del" parameterType="int"> delete from t_user where id = #{id} </delete> <!-- 修改資料 --> <update id="update" parameterType="com.mi.beans.User"> update t_user set name=#{name},age=#{age} where id=#{id} </update> <!--根據id查詢得到一個user對象--> <select id="getUser" parameterType="int" resultType="com.mi.beans.User"> select * from t_user where id=#{id} </select> <!-- 查詢所有的使用者 --> <select id="list" resultType="com.mi.beans.User"> select * from t_user; </select></mapper>
四、conf.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="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 設定資料庫串連資訊 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- 註冊userMapper.xml檔案 --> <mappers> <mapper resource="com/mi/mapping/userMappers.xml"/> </mappers></configuration>
五、SqlSessionUtil.java
我在這裡寫了一個工具類,主要目的是要拿到sqlSession,因為之後每次操作資料庫都需要寫一遍,所以進行一次封裝.
package com.mi.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionUtil { public static SqlSession getSqlSession() throws Exception{ String resource = "conf.xml"; //使用類載入器載入mybatis的設定檔(它也載入關聯的對應檔) InputStream is = Resources.getResourceAsStream(resource); //構建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //建立能執行對應檔中sql的sqlSession SqlSession sqlSession = sessionFactory.openSession(); return sqlSession; }}
六、MyTest.java
這是測試類別,通過上面的工具類sqlSession,最關鍵的是下面這句
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
MyBatis通過動態代理的方式實現mapper介面,之後就好辦了,執行介面中準備好的方法就可以了。
注意不要忘了sqlSession.commit()和sqlSession.close().否則在執行過程中雖然不會報錯,但是資料庫中是不會有變化的.
這裡我只執行了建立表的方法.package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;import com.mi.util.SqlSessionUtil;public class MyTest { public static void main(String[] args) throws Exception { SqlSession sqlSession = SqlSessionUtil.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.createTable("t_user"); sqlSession.commit(); sqlSession.close(); }}
使用 Mapper 介面的方式,不用寫介面實作類別,直接完成資料庫操作,簡單方便。
先上結構圖:
下面是具體的代碼:
一、User.java
實體類中的的get/set方法以及構造方法及toString方法就不貼了public class User { private int id; private String name; private int age;
二、UserMapper.java
這是mapper介面,面向介面編程的思想還是很重要的。也是本次博文最重要的部分。
介面定義有以下特點:
Mapper 介面方法名和 UserMapper.xml 中定義的每個 sql 的 id 同名。
Mapper 介面方法的輸入參數類型和 UserMapper.xml 中定義的 sql 的parameterType 類型相同。
Mapper 介面的傳回型別和 UserMapper.xml 中定義的 sql 的 resultType 類型相同
注意建立表的方法,有註解@Param
package com.mi.mapper;import org.apache.ibatis.annotations.Param;import com.mi.beans.User;public interface UserMapper { void createTable (@Param("tableName") String tableName); void add(User user); void del(int id); void update(User user); User getUser(int id); User[] list();}
三、userMappers.xml
這裡需要注意
1.xml檔案的namespace要寫成mapper介面的路徑,像下面.
<mapper namespace="com.mi.mapper.UserMapper">
2.在寫動態建立表的語句時,要寫成${tableName},而不是#{}. 點擊查看兩者的區別
create table ${tableName}...
下面是完整代碼:包括建立表、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,namespace的值習慣上設定成包名+sql對應檔名, 這樣就能夠保證namespace的值是唯一的 --><mapper namespace="com.mi.mapper.UserMapper"> <!-- 建立表 --> <update id="createTable" parameterType="String"> create table ${tableName} (id int primary key auto_increment,name varchar(20),age int) </update> <!-- 添加資料 --> <insert id="add" parameterType="com.mi.beans.User"> insert into t_user(name,age) value(#{name},#{age}) </insert> <!-- 刪除資料 --> <delete id="del" parameterType="int"> delete from t_user where id = #{id} </delete> <!-- 修改資料 --> <update id="update" parameterType="com.mi.beans.User"> update t_user set name=#{name},age=#{age} where id=#{id} </update> <!--根據id查詢得到一個user對象--> <select id="getUser" parameterType="int" resultType="com.mi.beans.User"> select * from t_user where id=#{id} </select> <!-- 查詢所有的使用者 --> <select id="list" resultType="com.mi.beans.User"> select * from t_user; </select></mapper>
四、conf.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="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 設定資料庫串連資訊 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- 註冊userMapper.xml檔案 --> <mappers> <mapper resource="com/mi/mapping/userMappers.xml"/> </mappers></configuration>
五、SqlSessionUtil.java
我在這裡寫了一個工具類,主要目的是要拿到sqlSession,因為之後每次操作資料庫都需要寫一遍,所以進行一次封裝.
package com.mi.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionUtil { public static SqlSession getSqlSession() throws Exception{ String resource = "conf.xml"; //使用類載入器載入mybatis的設定檔(它也載入關聯的對應檔) InputStream is = Resources.getResourceAsStream(resource); //構建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //建立能執行對應檔中sql的sqlSession SqlSession sqlSession = sessionFactory.openSession(); return sqlSession; }}
六、MyTest.java
這是測試類別,通過上面的工具類sqlSession,最關鍵的是下面這句
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
MyBatis通過動態代理的方式實現mapper介面,之後就好辦了,執行介面中準備好的方法就可以了。
注意不要忘了sqlSession.commit()和sqlSession.close().否則在執行過程中雖然不會報錯,但是資料庫中是不會有變化的.
這裡我只執行了建立表的方法.package com.mi.test;import org.apache.ibatis.session.SqlSession;import com.mi.beans.User;import com.mi.mapper.UserMapper;import com.mi.util.SqlSessionUtil;public class MyTest { public static void main(String[] args) throws Exception { SqlSession sqlSession = SqlSessionUtil.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.createTable("t_user"); sqlSession.commit(); sqlSession.close(); }}