国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mybatis基礎知識

這篇具有很好參考價值的文章主要介紹了Mybatis基礎知識。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、Mybatis簡介

1.Mybatis簡介

1.1原始jdbc操作(查詢數(shù)據(jù))

Mybatis基礎知識,mybatis,tomcat,java

?文章來源地址http://www.zghlxwxcb.cn/news/detail-519072.html

1.2原始jdbc操作(插入數(shù)據(jù))

Mybatis基礎知識,mybatis,tomcat,java

?

1.3 原始jdbc操作的分析

原始jdbc開發(fā)存在的問題如下:

①數(shù)據(jù)庫連接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費從而影響系統(tǒng)性能;

②sql 語句在代碼中硬編碼,造成代碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變java代碼;

③查詢操作時,需要手動將結(jié)果集中的數(shù)據(jù)手動封裝到實體中。插入操作時,需要手動將實體的數(shù)據(jù)設置到sql語句的占位符位置。

應對上述問題給出的解決方案:

①使用數(shù)據(jù)庫連接池初始化連接資源;

②將sql語句抽取到xml配置文件中;

③使用反射、內(nèi)省等底層技術(shù),自動將實體與表進行屬性與字段的自動映射。

1.4 什么是Mybatis

mybatis 是一個優(yōu)秀的基于java的持久層框架,它內(nèi)部封裝了jdbc,使開發(fā)者只需要關注sql語句本身,而不需要花費精力去處理加載驅(qū)動、創(chuàng)建連接、創(chuàng)建statement等繁雜的過程。

mybatis通過xml或注解的方式將要執(zhí)行的各種 statement配置起來,并通過java對象和statement中sql的動態(tài)參數(shù)進行映射生成最終執(zhí)行的sql語句。

最后mybatis框架執(zhí)行sql并將結(jié)果映射為java對象并返回。采用ORM思想解決了實體和數(shù)據(jù)庫映射的問題,對jdbc 進行了封裝,屏蔽了jdbc api 底層訪問細節(jié),使我們不用與jdbc api 打交道,就可以完成對數(shù)據(jù)庫的持久化操作。

2.Mybatis的快速入門

2.1 MyBatis開發(fā)步驟

MyBatis官網(wǎng)地址:mybatis – MyBatis 3 | Introduction

MyBatis開發(fā)步驟:

①添加MyBatis的坐標;

②創(chuàng)建user數(shù)據(jù)表;

③編寫User實體類;

④編寫映射文件UserMapper.xml;

⑤編寫核心文件SqlMapConfig.xml;

⑥編寫測試類。

2.2 環(huán)境搭建

(1)導入MyBatis的坐標和其他相關坐標

<!--mybatis坐標-->
<dependency>
 ? ?<groupId>org.mybatis</groupId>
 ? ?<artifactId>mybatis</artifactId>
 ? ?<version>3.4.5</version>
</dependency>
<!--mysql驅(qū)動坐標-->
<dependency> ? ?
 ? ?<groupId>mysql</groupId> ? 
 ? ?<artifactId>mysql-connector-java</artifactId> ? ?
 ? ?<version>5.1.6</version> ? ?
 ? ?<scope>runtime</scope>
</dependency>
<!--單元測試坐標-->
<dependency> ? ?
 ? ?<groupId>junit</groupId> ? ?
 ? ?<artifactId>junit</artifactId> ? ?
 ? ?<version>4.12</version> ? ?
 ? ?<scope>test</scope>
</dependency>
<!--日志坐標-->
<dependency> ? ?
 ? ?<groupId>log4j</groupId> ? ?
 ? ?<artifactId>log4j</artifactId> ? ?
 ? ?<version>1.2.12</version>
</dependency>

(2)創(chuàng)建user數(shù)據(jù)表

Mybatis基礎知識,mybatis,tomcat,java

?

(3)編寫User實體

public class User { ? ?
    private int id; ? ?
    private String username; ? ?
    private String password;
 ? ?//省略get個set方法
}

(4)編寫UserMapper映射文件

<?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="userMapper"> ? ?
    <select id="findAll" resultType="com.itheima.domain.User"> ? ? ? ?
        select * from User ? ?
    </select>
</mapper>

(5)編寫Mybatis核心文件

<!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:///test"/> ? ? ? ? ? ? ? ?
                <property name="username" value="root"/>
                <property name="password" value="root"/> ? ? ? ? ? ?
            </dataSource> ? ? ? ?
        </environment> ? ?
    </environments> ? ?
    
    <mappers> 
        <mapper resource="com/itheima/mapper/UserMapper.xml"/> 
    </mappers>
</configuration>
?

2.3 編寫測試代碼

//加載核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//獲得sqlSession工廠對象
SqlSessionFactory sqlSessionFactory = new ? ? ? ? ? ?
 ? ? ? ? ? ? ? ? ? ? ? ? ? SqlSessionFactoryBuilder().build(resourceAsStream);
//獲得sqlSession對象
SqlSession sqlSession = sqlSessionFactory.openSession();
//執(zhí)行sql語句
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印結(jié)果
System.out.println(userList);
//釋放資源
sqlSession.close();

3. MyBatis的映射文件概述

Mybatis基礎知識,mybatis,tomcat,java

?

4. MyBatis的增刪改查操作

4.1 MyBatis的插入數(shù)據(jù)操作

(1)編寫UserMapper映射文件

<mapper namespace="userMapper"> ? ?
    <insert id="add" parameterType="com.itheima.domain.User"> ? ? ? ?
        insert into user values(#{id},#{username},#{password}) ? ?
    </insert>
</mapper>

(2)編寫插入實體User的代碼

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new 
 ? ? ? ? ? ? ? ? ? ? ? ?SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int insert = sqlSession.insert("userMapper.add", user);
System.out.println(insert);
//提交事務
sqlSession.commit();
sqlSession.close();

(3)插入操作注意問題

? 插入語句使用insert標簽;

? 在映射文件中使用parameterType屬性指定要插入的數(shù)據(jù)類型;

?Sql語句中使用#{實體屬性名}方式引用實體中的屬性值;

?插入操作使用的API是sqlSession.insert(“命名空間.id”,實體對象);

?插入操作涉及數(shù)據(jù)庫數(shù)據(jù)變化,所以要使用sqlSession對象顯示的提交事務,即sqlSession.commit()。

4.2 MyBatis的修改數(shù)據(jù)操作

(1)編寫UserMapper映射文件

<mapper namespace="userMapper">
 ? ?<update id="update" parameterType="com.itheima.domain.User">
 ? ? ?  update user set username=#{username},password=#{password} where id=#{id}
 ? ?</update>
</mapper>
?

(2)編寫修改實體User的代碼

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int update = sqlSession.update("userMapper.update", user);
System.out.println(update);
sqlSession.commit();
sqlSession.close();

(3)修改操作注意問題

? 修改語句使用update標簽;

? 修改操作使用的API是sqlSession.update(“命名空間.id”,實體對象)。

4.3 MyBatis的刪除數(shù)據(jù)操作

1)編寫UserMapper映射文件

<mapper namespace="userMapper">
 ? ?<delete id="delete" parameterType="java.lang.Integer">
 ? ? ?  delete from user where id=#{id}
 ? ?</delete>
</mapper>
?

2)編寫刪除數(shù)據(jù)的代碼

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int delete = sqlSession.delete("userMapper.delete",3);
System.out.println(delete);
sqlSession.commit();
sqlSession.close();

3)刪除操作注意問題

? 刪除語句使用delete標簽;

?Sql語句中使用#{任意字符串}方式引用傳遞的單個參數(shù);

?刪除操作使用的API是sqlSession.delete(“命名空間.id”,Object)。

4.4 知識小結(jié)
增刪改查映射配置與API:
查詢數(shù)據(jù): List<User> userList = sqlSession.selectList("userMapper.findAll");
 ? ?<select id="findAll" resultType="com.itheima.domain.User">
 ? ? ? ?select * from User
 ? ?</select>
添加數(shù)據(jù): sqlSession.insert("userMapper.add", user);
 ? ?<insert id="add" parameterType="com.itheima.domain.User">
 ? ? ? ?insert into user values(#{id},#{username},#{password})
 ? ?</insert>
修改數(shù)據(jù): sqlSession.update("userMapper.update", user);
 ? ?<update id="update" parameterType="com.itheima.domain.User">
 ? ? ? ?update user set username=#{username},password=#{password} where id=#{id}
 ? ?</update>
刪除數(shù)據(jù):sqlSession.delete("userMapper.delete",3);
 ? ?<delete id="delete" parameterType="java.lang.Integer">
 ? ? ? ?delete from user where id=#{id}
 ? ?</delete>

5. MyBatis核心配置文件概述

5.1 MyBatis核心配置文件層級關系

Mybatis基礎知識,mybatis,tomcat,java

?

5.2 MyBatis常用配置解析

1)environments標簽

數(shù)據(jù)庫環(huán)境的配置,支持多環(huán)境配置。

Mybatis基礎知識,mybatis,tomcat,java

?

其中,事務管理器(transactionManager)類型有兩種:

JDBC:這個配置就是直接使用了JDBC 的提交和回滾設置,它依賴于從數(shù)據(jù)源得到的連接來管理事務作用域。

MANAGED:這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命周期(比如 JEE 應用服務器的上下文)。 默認情況下它會關閉連接,然而一些容器并不希望這樣,因此需要將 closeConnection 屬性設置為 false 來阻止它默認的關閉行為。

其中,數(shù)據(jù)源(dataSource)類型有三種:

UNPOOLED:這個數(shù)據(jù)源的實現(xiàn)只是每次被請求時打開和關閉連接。

POOLED:這種數(shù)據(jù)源的實現(xiàn)利用“池”的概念將 JDBC 連接對象組織起來。

JNDI:這個數(shù)據(jù)源的實現(xiàn)是為了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個 JNDI 上下文的引用。

2)mapper標簽

該標簽的作用是加載映射的,加載方式有如下幾種:

使用相對于類路徑的資源引用,例如:

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>;

使用完全限定資源定位符(URL),例如:

<mapper url="file:///var/mappers/AuthorMapper.xml"/>;

使用映射器接口實現(xiàn)類的完全限定類名,例如:

<mapper class="org.mybatis.builder.AuthorMapper"/>;

將包內(nèi)的映射器接口實現(xiàn)全部注冊為映射器,例如:

<package name="org.mybatis.builder"/>。

3)Properties標簽

實際開發(fā)中,習慣將數(shù)據(jù)源的配置信息單獨抽取成一個properties文件,該標簽可以加載額外配置的properties文件

Mybatis基礎知識,mybatis,tomcat,java

?

4)typeAliases標簽

類型別名是為Java 類型設置一個短的名字。原來的類型名稱配置如下

Mybatis基礎知識,mybatis,tomcat,java

?

配置typeAliases,為com.itheima.domain.User定義別名為user

Mybatis基礎知識,mybatis,tomcat,java

?

?

上面我們是自定義的別名,mybatis框架已經(jīng)為我們設置好的一些常用的類型的別名

Mybatis基礎知識,mybatis,tomcat,java

?

5.3 知識小結(jié)

核心配置文件常用配置:

properties標簽:該標簽可以加載外部的properties文件

<properties resource="jdbc.properties"></properties>

typeAliases標簽:設置類型別名

<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>

mappers標簽:加載映射配置

<mapper resource="com/itheima/mapper/UserMapping.xml"></mapper>

environments標簽:數(shù)據(jù)源環(huán)境配置標簽

Mybatis基礎知識,mybatis,tomcat,java

?

6.MyBatis相應API

6.1 SqlSession工廠構(gòu)建器SqlSessionFactoryBuilder

常用API:SqlSessionFactory build(InputStream inputStream)

通過加載mybatis的核心文件的輸入流的形式構(gòu)建一個SqlSessionFactory對象

String resource = "org/mybatis/builder/mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 
SqlSessionFactory factory = builder.build(inputStream);

其中, Resources 工具類,這個類在 org.apache.ibatis.io 包中。Resources 類幫助你從類路徑下、文件系統(tǒng)或一個 web URL 中加載資源文件。

6.2 SqlSession工廠對象SqlSessionFactory

SqlSessionFactory 有多個個方法創(chuàng)建SqlSession 實例。常用的有如下兩個:

Mybatis基礎知識,mybatis,tomcat,java

?

6.3 SqlSession會話對象

SqlSession 實例在 MyBatis 中是非常強大的一個類。在這里你會看到所有執(zhí)行語句、提交或回滾事務和獲取映射器實例的方法。

執(zhí)行語句的方法主要有:

<T> T selectOne(String statement, Object parameter) 
<E> List<E> selectList(String statement, Object parameter) 
int insert(String statement, Object parameter) 
int update(String statement, Object parameter) 
int delete(String statement, Object parameter)
 

操作事務的方法主要有

void commit();
void rollback()。

二、Mybatis的Dao層實現(xiàn)

1.Mybatis的Dao層實現(xiàn)

1.1 傳統(tǒng)開發(fā)方式

1.1.1編寫UserDao接口
public interface UserDao {
 ? ?List<User> findAll() throws IOException;
}
1.1.2.編寫UserDaoImpl實現(xiàn)
public class UserDaoImpl implements UserDao {
 ? ?public List<User> findAll() throws IOException {
 ? ? ? ?InputStream resourceAsStream = 
 ? ? ? ? ? ? ? ? ? ?Resources.getResourceAsStream("SqlMapConfig.xml");
 ? ? ? ?SqlSessionFactory sqlSessionFactory = new 
 ? ? ? ? ? ? ? ? ? ?SqlSessionFactoryBuilder().build(resourceAsStream);
 ? ? ? ?SqlSession sqlSession = sqlSessionFactory.openSession();
 ? ? ? ?List<User> userList = sqlSession.selectList("userMapper.findAll");
 ? ? ? ?sqlSession.close();
 ? ? ? ?return userList;
 ?  }
}
1.1.3 測試傳統(tǒng)方式
@Test
public void testTraditionDao() throws IOException {
 ? ?UserDao userDao = new UserDaoImpl();
 ? ?List<User> all = userDao.findAll();
 ? ?System.out.println(all);
}
?

1.2 代理開發(fā)方式

1.2.1 代理開發(fā)方式介紹

采用 Mybatis 的代理開發(fā)方式實現(xiàn) DAO 層的開發(fā),這種方式是我們后面進入企業(yè)的主流。

Mapper 接口開發(fā)方法只需要程序員編寫Mapper 接口(相當于Dao 接口),由Mybatis 框架根據(jù)接口定義創(chuàng)建接口的動態(tài)代理對象,代理對象的方法體同上邊Dao接口實現(xiàn)類方法。

Mapper 接口開發(fā)需要遵循以下規(guī)范:

1) Mapper.xml文件中的namespace與mapper接口的全限定名相同;

2) Mapper接口方法名和Mapper.xml中定義的每個statement的id相同;

3) Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的每個sql的parameterType的類型相同;

4) Mapper接口方法的輸出參數(shù)類型和mapper.xml中定義的每個sql的resultType的類型相同

1.2.2 編寫UserMapper接口

Mybatis基礎知識,mybatis,tomcat,java

?

1.2.3測試代理方式
@Test
public void testProxyDao() throws IOException {
 ? ?InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
 ? ?SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
 ? ?SqlSession sqlSession = sqlSessionFactory.openSession();
 ? ?//獲得MyBatis框架生成的UserMapper接口的實現(xiàn)類
 ?UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
 ? ?User user = userMapper.findById(1);
 ? ?System.out.println(user);
 ? ?sqlSession.close();
}

1.3 知識小結(jié)

MyBatis的Dao層實現(xiàn)的兩種方式:

手動對Dao進行實現(xiàn):傳統(tǒng)開發(fā)方式

代理方式對Dao進行實現(xiàn):

 **UserMapper userMapper = sqlSession.getMapper(UserMapper.class);**

2.MyBatis映射文件深入

2.1 動態(tài)sql語句

2.1.1動態(tài)sql語句概述

Mybatis 的映射文件中,前面我們的 SQL 都是比較簡單的,有些時候業(yè)務邏輯復雜時,我們的 SQL是動態(tài)變化的,此時在前面的學習中我們的 SQL 就不能滿足要求了。

參考的官方文檔,描述如下:

Mybatis基礎知識,mybatis,tomcat,java

?

2.1.2動態(tài) SQL 之<if>

我們根據(jù)實體類的不同取值,使用不同的 SQL語句來進行查詢。比如在 id如果不為空時可以根據(jù)id查詢,如果username 不同空時還要加入用戶名作為條件。這種情況在我們的多條件組合查詢中經(jīng)常會碰到。

<select id="findByCondition" parameterType="user" resultType="user">
 ?  select * from User
 ? ?<where>
 ? ? ? ?<if test="id!=0">
 ? ? ? ? ?  and id=#{id}
 ? ? ? ?</if>
 ? ? ? ?<if test="username!=null">
 ? ? ? ? ?  and username=#{username}
 ? ? ? ?</if>
 ? ?</where>
</select>
?

當查詢條件id和username都存在時,控制臺打印的sql語句如下:

 ? ? … … …
 ? ? //獲得MyBatis框架生成的UserMapper接口的實現(xiàn)類
 ?UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
 ? ?User condition = new User();
 ? ?condition.setId(1);
 ? ?condition.setUsername("lucy");
 ? ?User user = userMapper.findByCondition(condition);
 ? ?… … …

Mybatis基礎知識,mybatis,tomcat,java

?

當查詢條件只有id存在時,控制臺打印的sql語句如下:

 … … …
 //獲得MyBatis框架生成的UserMapper接口的實現(xiàn)類
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User condition = new User();
condition.setId(1);
User user = userMapper.findByCondition(condition);
… … …
?

?

2.1.3 動態(tài) SQL 之<foreach>

循環(huán)執(zhí)行sql的拼接操作,例如:SELECT * FROM USER WHERE id IN (1,2,5)。

<select id="findByIds" parameterType="list" resultType="user">
 ?  select * from User
 ? ?<where>
 ? ? ? ?<foreach collection="array" open="id in(" close=")" item="id" separator=",">
 ? ? ? ? ?  #{id}
 ? ? ? ?</foreach>
 ? ?</where>
</select>

測試代碼片段如下:

 … … …
 //獲得MyBatis框架生成的UserMapper接口的實現(xiàn)類
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int[] ids = new int[]{2,5};
List<User> userList = userMapper.findByIds(ids);
System.out.println(userList);
… … …
?

?foreach標簽的屬性含義如下:

<foreach>標簽用于遍歷集合,它的屬性:

?collection:代表要遍歷的集合元素,注意編寫時不要寫#{};

?open:代表語句的開始部分;

?close:代表結(jié)束部分;

?item:代表遍歷集合的每個元素,生成的變量名;

?sperator:代表分隔符。

2.2 SQL片段抽取

Sql 中可將重復的 sql 提取出來,使用時用 include 引用即可,最終達到 sql 重用的目的

<!--抽取sql片段簡化編寫-->
<sql id="selectUser" select * from User</sql>
<select id="findById" parameterType="int" resultType="user">
 ? ?<include refid="selectUser"></include> where id=#{id}
</select>
<select id="findByIds" parameterType="list" resultType="user">
 ? ?<include refid="selectUser"></include>
 ? ?<where>
 ? ? ? ?<foreach collection="array" open="id in(" close=")" item="id" separator=",">
 ? ? ? ? ?  #{id}
 ? ? ? ?</foreach>
 ? ?</where>
</select>

2.3 知識小結(jié)

MyBatis映射文件配置:

?<select>:查詢;

<insert>:插入;

<update>:修改;

<delete>:刪除;

<where>:where條件;

<if>:if判斷;

<foreach>:循環(huán);

<sql>:sql片段抽取。

3. MyBatis核心配置文件深入

3.1 typeHandlers標簽

無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數(shù)時,還是從結(jié)果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉(zhuǎn)換成 Java 類型。下表描述了一些默認的類型處理器(截取部分)。

Mybatis基礎知識,mybatis,tomcat,java

?

你可以重寫類型處理器或創(chuàng)建你自己的類型處理器來處理不支持的或非標準的類型。具體做法為:實現(xiàn) org.apache.ibatis.type.TypeHandler 接口, 或繼承一個很便利的類org.apache.ibatis.type.BaseTypeHandler, 然后可以選擇性地將它映射到一個JDBC類型。例如需求:一個Java中的Date數(shù)據(jù)類型,我想將之存到數(shù)據(jù)庫的時候存成一個1970年至今的毫秒數(shù),取出來時轉(zhuǎn)換成java的Date,即java的Date與數(shù)據(jù)庫的varchar毫秒值之間轉(zhuǎn)換。

開發(fā)步驟:

①定義轉(zhuǎn)換類繼承類BaseTypeHandler<T>;

②覆蓋4個未實現(xiàn)的方法,其中setNonNullParameter為java程序設置數(shù)據(jù)到數(shù)據(jù)庫的回調(diào)方法,getNullableResult為查詢時 mysql的字符串類型轉(zhuǎn)換成 java的Type類型的方法;

③在MyBatis核心配置文件中進行注冊。

測試轉(zhuǎn)換是否正確

public class MyDateTypeHandler extends BaseTypeHandler<Date> {
 ? ?public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType type) {
 ? ? ? ?preparedStatement.setString(i,date.getTime()+"");
 ?  }
 ? ?public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
 ? ? ? ?return new Date(resultSet.getLong(s));
 ?  }
 ? ?public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
 ? ? ? ?return new Date(resultSet.getLong(i));
 ?  }
 ? ?public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
 ? ? ? ?return callableStatement.getDate(i);
 ?  }
}
<!--注冊類型自定義轉(zhuǎn)換器-->
<typeHandlers>
 ? ?<typeHandler handler="com.itheima.typeHandlers.MyDateTypeHandler"></typeHandler>
</typeHandlers>

測試添加操作:

user.setBirthday(new Date());
userMapper.add2(user);

數(shù)據(jù)庫數(shù)據(jù):

Mybatis基礎知識,mybatis,tomcat,java

?

測試查詢操作:

Mybatis基礎知識,mybatis,tomcat,java

?

3.2 plugins標簽

MyBatis可以使用第三方的插件來對功能進行擴展,分頁助手PageHelper是將分頁的復雜操作進行封裝,使用簡單的方式即可獲得分頁的相關數(shù)據(jù)。

開發(fā)步驟:

①導入通用PageHelper的坐標;

②在mybatis核心配置文件中配置PageHelper插件;

③測試分頁數(shù)據(jù)獲取。

①導入通用PageHelper坐標
<!-- 分頁助手 -->
<dependency>
 ? ?<groupId>com.github.pagehelper</groupId>
 ? ?<artifactId>pagehelper</artifactId>
 ? ?<version>3.7.5</version>
</dependency>
<dependency>
 ? ?<groupId>com.github.jsqlparser</groupId>
 ? ?<artifactId>jsqlparser</artifactId>
 ? ?<version>0.9.1</version>
</dependency>
?
②在mybatis核心配置文件中配置PageHelper插件
<!-- 注意:分頁助手的插件  配置在通用館mapper之前 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
 ? ?<!-- 指定方言 -->
 ? ?<property name="dialect" value="mysql"/>
</plugin>
③測試分頁代碼實現(xiàn)
@Test
public void testPageHelper(){
 ? ?//設置分頁參數(shù)
 ? ?PageHelper.startPage(1,2);
?
 ? ?List<User> select = userMapper2.select(null);
 ? ?for(User user : select){
 ? ? ? ?System.out.println(user);
 ?  }
}

獲得分頁相關的其他參數(shù)

//其他分頁的數(shù)據(jù)
PageInfo<User> pageInfo = new PageInfo<User>(select);
System.out.println("總條數(shù):"+pageInfo.getTotal());
System.out.println("總頁數(shù):"+pageInfo.getPages());
System.out.println("當前頁:"+pageInfo.getPageNum());
System.out.println("每頁顯示長度:"+pageInfo.getPageSize());
System.out.println("是否第一頁:"+pageInfo.isIsFirstPage());
System.out.println("是否最后一頁:"+pageInfo.isIsLastPage());
?

3.3 知識小結(jié)

MyBatis核心配置文件常用標簽:

1、properties標簽:該標簽可以加載外部的properties文件;

2、typeAliases標簽:設置類型別名;

3、environments標簽:數(shù)據(jù)源環(huán)境配置標簽;

4、typeHandlers標簽:配置自定義類型處理器;

5、plugins標簽:配置MyBatis的插件。

 
 
 

三、Mybatis的注解開發(fā)

1.Mybatis的注解開發(fā)

1.1 MyBatis的常用注解

這幾年來注解開發(fā)越來越流行,Mybatis也可以使用注解開發(fā)方式,這樣我們就可以減少編寫Mapper

映射文件了。我們先圍繞一些基本的CRUD來學習,再學習復雜映射多表操作。

@Insert:實現(xiàn)新增;

@Update:實現(xiàn)更新;

@Delete:實現(xiàn)刪除;

@Select:實現(xiàn)查詢;

@Result:實現(xiàn)結(jié)果集封裝;

@Results:可以與@Result 一起使用,封裝多個結(jié)果集;

@One:實現(xiàn)一對一結(jié)果集封裝;

@Many:實現(xiàn)一對多結(jié)果集封裝。

1.2 MyBatis的增刪改查

我們完成簡單的user表的增刪改查的操作

private UserMapper userMapper;
?
@Before
public void before() throws IOException {
 ? ?InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
 ? ?SqlSessionFactory sqlSessionFactory = new 
 ? ? ? ? ? ? ? ? SqlSessionFactoryBuilder().build(resourceAsStream);
 ? ?SqlSession sqlSession = sqlSessionFactory.openSession(true);
 ? ?userMapper = sqlSession.getMapper(UserMapper.class);
}
?
@Test
public void testAdd() {
 ? ?User user = new User();
 ? ?user.setUsername("測試數(shù)據(jù)");
 ? ?user.setPassword("123");
 ? ?user.setBirthday(new Date());
 ? ?userMapper.add(user);
}
@Test
public void testUpdate() throws IOException {
 ? ?User user = new User();
 ? ?user.setId(16);
 ? ?user.setUsername("測試數(shù)據(jù)修改");
 ? ?user.setPassword("abc");
 ? ?user.setBirthday(new Date());
 ? ?userMapper.update(user);
}
?
@Test
public void testDelete() throws IOException {
 ? ?userMapper.delete(16);
}
@Test
public void testFindById() throws IOException {
 ? ?User user = userMapper.findById(1);
 ? ?System.out.println(user);
}
@Test
public void testFindAll() throws IOException {
 ? ?List<User> all = userMapper.findAll();
 ? ?for(User user : all){
 ? ? ? ?System.out.println(user);
 ?  }
}
?

修改MyBatis的核心配置文件,我們使用了注解替代的映射文件,所以我們只需要加載使用了注解的Mapper接口即可

<mappers>
 ? ?<!--掃描使用注解的類-->
 ? ?<mapper class="com.itheima.mapper.UserMapper"></mapper>
</mappers>

或者指定掃描包含映射關系的接口所在的包也可以

<mappers>
 ? ?<!--掃描使用注解的類所在的包-->
 ? ?<package name="com.itheima.mapper"></package>
</mappers>

1.3 MyBatis的注解實現(xiàn)復雜映射開發(fā)

實現(xiàn)復雜關系映射之前我們可以在映射文件中通過配置<resultMap>來實現(xiàn),使用注解開發(fā)后,我們可以使用@Results注解,@Result注解,@One注解,@Many注解組合完成復雜關系的配置

Mybatis基礎知識,mybatis,tomcat,java

?

到了這里,關于Mybatis基礎知識的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Tomcat和Servlet基礎知識的講解(JavaEE初階系列16)

    Tomcat和Servlet基礎知識的講解(JavaEE初階系列16)

    目錄 前言: 1.Tomcat 1.1Tomcat是什么 1.2下載安裝 2.Servlet 2.1什么是Servlet 2.2使用Servlet來編寫一個“hello?world” 1.2.1創(chuàng)建項目(Maven) 1.2.2引入依賴(Servlet) 1.2.3創(chuàng)建目錄(webapp) 1.2.4編寫代碼(HelloServlet) 1.2.5打包(war) 1.2.6部署(拷貝war到webapps目錄中) 1.2.7驗證(瀏覽器發(fā)一

    2024年02月11日
    瀏覽(45)
  • Java入門基礎知識

    Java入門基礎知識

    JDK是Java工具開發(fā)包,包含了JVM(程序運行環(huán)境),核心類庫(直接應用即可),開發(fā)工具(Javac,java,jdb,jhat…) JRE是Java運行環(huán)境,包含了JVM,核心類庫,運行工具 JDK包含了JRE,JRE包含了jvm 全部小寫(有特定含義的英文字符) class 表示一個類 整數(shù)類型 小數(shù)類型 字符串類型 :只用\\\"雙引

    2024年02月09日
    瀏覽(92)
  • java基礎知識

    java基礎知識

    java的數(shù)據(jù)結(jié)構(gòu)有哪些? 線性結(jié)構(gòu):數(shù)組、鏈表、哈希表;隊列、棧 非線性結(jié)構(gòu)有:堆、樹(二叉樹、B樹、B+樹、紅黑樹) 圖 常用的集合類有List集合,Set集合,Map集合,其中List集合與Set集合繼承了Collection接口, List 有序可重復的集合接口,繼承自Collection接口,表示元素按照插入順

    2024年02月06日
    瀏覽(99)
  • java基礎知識梳理

    雖然已經(jīng)在實際工作中與java打交道5年之多,但是一直沒系統(tǒng)地對java這門語言進行梳理和總結(jié),掌握的知識也比較零散。恰好利用這段時間重新認識下java,并對一些常見的語法和知識點做個總結(jié)與回顧,一方面為了加深印象,方便后面查閱,一方面為了學好java打下基礎。拉

    2024年02月04日
    瀏覽(103)
  • java基礎知識二

    1.1、基本概念 類是具有相同屬性和行為的一組對象的 集合 ,包含數(shù)據(jù)和操作,數(shù)據(jù)被稱為 成員變量 ,操作被稱為方法 對象是類的實例,即 對象 = 數(shù)據(jù) + 行為 或者 對象 = 狀態(tài) + 操作 類抽象的、概念上的定義,對象是一個具體的、實際存在的個體,即一個實例 1.2、類的特

    2024年02月07日
    瀏覽(97)
  • Java ---基礎知識& 期末復習

    Java ---基礎知識& 期末復習

    1.Java是低級語言還是 高級語言 ?? 答:高級語言。 2.Java是面向?qū)ο蟮某绦蛟O計語言嗎 答:是。 3. Java是編譯型的計算機語言還是解釋型的計算機語言。 答: 一種說法:Java是編譯型的。因為所有的Java代碼都是要編譯的,.java不經(jīng)過編譯就無法執(zhí)行。 另一種說法:Java是解釋型

    2024年01月16日
    瀏覽(87)
  • java基礎知識——25.異常

    java基礎知識——25.異常

    這篇文章,我們來講一下java的異常體系 目錄 1.異常概述 2 java的異常繼承體系 2.1 編譯時異常 2.2 運行時異常 2.3 底層原理 2.4 異常的作用 3.異常的處理方式 3.1 JVM默認的處理方式 3.2 自己處理(捕獲異常) 3.2.1自己處理的4個問題 3.2.2 異常中的常見方法 3.3 拋出處理 3.3.1 throws

    2024年02月01日
    瀏覽(90)
  • Java GC基礎知識

    在對象中添加一個 引用計數(shù)器 ,每當有一個地方引用它時,計數(shù)器值就加一;當引用失效時,計數(shù)器值就減一;任何時刻計數(shù)器為零的對象就是不可 能再被使用的 引用計數(shù)法的缺陷: 如果使用 引用計數(shù)法 , objA 和 objB 除互相引用外沒有任何其他引用,但是無法被回收。

    2023年04月13日
    瀏覽(89)
  • Java中常量基礎知識

    Java中常量基礎知識

    什么是字面常量? 拿第一行輸出語句來說,這行代碼輸出了 “hello” 這個字符串,無論何時何地運行程序,輸出的這個字符串都不會變,這就是字面常量。 定義:常量即程序運行期間,固定不變的量稱為常量。 package ht; public class ht1 { ? ?public static void main(String[] args) { ? ?

    2024年02月06日
    瀏覽(87)
  • Java基礎知識篇——Java基本介紹

    Java基礎知識篇——Java基本介紹

    Java 是 Sun Microsystems 于 1995 年首次發(fā)布的一種 編程語言 和計算平臺。編程語言還是比較好理解的,什么是 計算平臺 呢? 計算平臺是電腦中運行應用程序(軟件的環(huán)境),包括硬件環(huán)境和軟件環(huán)境。一般系統(tǒng)平臺包括一臺電腦的硬件體系結(jié)構(gòu),操作系統(tǒng)、運行時庫。 Java 是快

    2024年03月11日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包