上篇文章我們介紹通過Java代碼來創建mybatis的配置文件,港真,這種方式看起來有意思實際在開發中用的並不多,mybatis的配置還是以xml配置爲主,本文我們就來看看如何通過xml文件來配置mybatis。關於mybatis的一些基礎知識小夥伴們可以參考這篇博客 初識mybatis。另外,上篇博客中,小夥伴們也看到了通過添加jar包的方式來搭建mybatis環境太過於麻煩,so,本文我們還是迴歸到Maven上吧。OK,廢話不多說,開始今天的coding之旅吧。
創建Project並添加Maven支持
我這裏以IntelliJ爲例來說明如何創建,先創建一個普通的java工程,創建成功之後,選中工程右鍵單擊,選擇Add Framework Support,然後選擇Maven,點擊OK就可以了。添加Maven支持src目錄下多了幾個文件夾,同時也多了一個pom.xml文件,如下:
然後在pom.xml文件中添加相關依賴,我們這裏一共添加三個,一個mybatis、單元測試、mysql驅動,如下:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
OK,如此我的mybatis環境就搭建好了。接下來我們還是按照上文的順序來看看要怎麼做。
通過xml創建mybatis配置
在創建xml配置文件的時候,對於數據庫的配置信息我們可以直接創建一個db.properties文件,然後將數據庫的配置信息放入其中,如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=sang
- 1
- 2
- 3
- 4
注意,所有的配置文件我們都放在resources文件夾下(小夥伴如果放錯了會出現文件找不到的情況,這個時候仔細檢查下都很好解決的),如下圖:
有了數據庫配置信息,接下來我們就可以創建mybatis的配置文件了,我這裏配置文件取名爲mybatis-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>
<properties resource="db.properties"/>
<typeAliases>
<typeAlias type="org.sang.bean.User" alias="user"/>
</typeAliases>
<environments default="development">
<environment id="development">
<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 resource="userMapper.xml"/>
</mappers>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
關於這個配置文件我說如下幾點:
1.第6行我們引入剛剛創建的db.properties文件,方便我們在配置數據庫的時候通過${XXX}來直接引用其中的值。
2.第7-9行給我們的User實體類取一個別名,這樣在Mapper的配置文件中我們就可以直接使用這裏的別名了。
3.從第10行開始配置我們的mybatis運行環境,我們可以在environments節點中配置多個environment,比如開發環境下的environment,生產環境下的environment,然後在environments中通過default屬性來選擇你要使用哪一種環境。
4.14-17行配置數據庫相關屬性,通過${XXX}來直接引用db.properties中的值。
5.第21行到23行配置映射器Mapper,下面我們來說說如何創建Mapper
有了這個XML文件,接下來我們就可以通過這個xml文件來獲取一個SqlSession了,當然,如上篇博客所述,我們需要把SqlSessionFactory搞成單例模式,所以創建方式如下:
public class DBUtils {
private static SqlSessionFactory sqlSessionFactory = null;
private static final Class CLASS_LOCK = DBUtils.class;
public static SqlSessionFactory initSqlSessionFactory() {
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis-conf.xml");
} catch (IOException e) {
e.printStackTrace();
}
synchronized (CLASS_LOCK) {
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}
}
return sqlSessionFactory;
}
public static SqlSession openSqlSession() {
if(sqlSessionFactory==null)
initSqlSessionFactory();
return sqlSessionFactory.openSession();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
關於這個類我這裏就不做過多說明了,小夥伴們有疑問可以參考上篇博客。
創建Mapper
上篇博客我們說過Mapper由兩部分組成,Java接口+註解或者Java接口+XML配置,我們在上篇博客中使用Java接口+註解的方式來創建了Mapper,那麼本文我們就來看看一種更常用的方式Java接口+XML配置的方式。
創建Java接口:
public interface UserMapper {
public User getUser(Long id);
public int insertUser(User user);
public int deleteUser(Long id);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
小夥伴們注意,這裏我並沒有給getUser方法添加@Select註解,我們將在xml配置文件中通過xml來解決這個問題,同時我們還添加了兩個方法,一個向數據庫中添加數據,一個刪除數據。
創建配置文件
在resources中創建userMapper.xml,內容如下:
<?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="org.sang.db.UserMapper">
<select id="getUser" resultType="user" parameterType="Long">
select * from user where id = #{id}
</select>
<insert id="insertUser" parameterType="user">
INSERT INTO user(username,password,address) VALUES (#{username},#{password},#{address})
</insert>
<delete id="deleteUser" parameterType="Long">
DELETE FROM user where id=#{id}
</delete>
</mapper>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
關於這個配置文件我說兩點:
1.mapper節點的namespace屬性就是UserMapper接口的全路徑
2.select節點的id屬性就是UserMapper中的方法名稱,resultType屬性的值是我們在mybatis-conf.xml中定義給User類定義的別名,parameterType是指getUser方法參數的類型。
3.insert節點用來執行數據的插入操作
4.delete節點用來執行數據的刪除操作
OK ,最後再給小夥伴們看看我們的實體類,如下:
public class User {
private Long id;
private String username;
private String password;
private String address;
//省略getter/setter
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
OK,如此之後,我們就可以來測試代碼啦。
測試
查詢
@Test
public void test1() {
SqlSession sqlSession = null;
try {
sqlSession = DBUtils.openSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUser(1l);
System.out.println(user);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
查詢結果如下:
添加
@Test
public void test2() {
SqlSession sqlSession = null;
try {
sqlSession = DBUtils.openSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
for (int i = 0; i < 3; i++) {
userMapper.insertUser(new User(null, "u-" + i, "p-" + i, "a-" + i));
}
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
添加結果:
刪除
@Test
public void test3() {
SqlSession sqlSession = null;
try {
sqlSession = DBUtils.openSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int i = userMapper.deleteUser(5l);
System.out.println(i);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
刪除結果:
OK,以上就是我們通過xml配置文件來使用mybatis。
本文案例下載:
本文案例GitHub地址https://github.com/lenve/JavaEETest/tree/master/Test27-mybatis3。