一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 淺析Spring和MyBatis整合及逆向工程

淺析Spring和MyBatis整合及逆向工程

2020-05-23 12:10鹿天斐 JAVA教程

這篇文章主要介紹了Spring和MyBatis整合及逆向工程的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

spring和mybatis整合

整合思路

需要spring通過單例方式管理SqlSessionFactory。

spring和mybatis整合生成代理對象,使用SqlSessionFactory創建SqlSession。(spring和mybatis整合自動完成)

持久層的mapper都需要由spring進行管理。

整合環境

創建一個新的java工程(接近實際開發的工程結構)

jar包:

mybatis3.2.7的jar包

spring3.2.0的jar包

mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,現在mybatis和spring整合由mybatis提供。

全部jar包(含springmvc)

淺析Spring和MyBatis整合及逆向工程

工程結構

淺析Spring和MyBatis整合及逆向工程

第一步:整合配置sqlSessionFactory

在applicationContext.xml配置sqlSessionFactory和數據源

sqlSessionFactory在mybatis和spring的整合包下。

淺析Spring和MyBatis整合及逆向工程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- 加載配置文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 數據源,使用dbcp -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- sqlSessinFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加載mybatis的配置文件 -->
<property name="configLocation" value="mybatis/SqlMapConfig.xml" />
<!-- 數據源 -->
<property name="dataSource" ref="dataSource" />
</bean>

原始dao開發(和spring整合后)

sqlmap/User.xml

淺析Spring和MyBatis整合及逆向工程

在SqlMapconfig.xml中加載User.xml

淺析Spring和MyBatis整合及逆向工程

dao(實現類繼承SqlSessionDaoSupport)

之前dao接口實現類需要注入SqlSessoinFactory,通過spring進行注入。

淺析Spring和MyBatis整合及逆向工程

這里使用spring聲明配置方式,配置dao的bean:

讓UserDaoImpl實現類繼承SqlSessionDaoSupport

淺析Spring和MyBatis整合及逆向工程

配置dao

在applicationContext.xml中配置dao接口

?
1
2
3
4
<!-- 原始dao接口 -->
<bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

測試程序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
source_folder/UserDaoImplTest.java
public class UserDaoImplTest {
private ApplicationContext applicationContext;
//在setUp這個方法得到spring容器
@Before
public void setUp() throws Exception {
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Test
public void testFindUserById() throws Exception {
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
//調用userDao的方法
User user = userDao.findUserById(1);
System.out.println(user);
}
}

mapper代理開發

Usermapper.xml和Usermapper.java

將之前工程中拷貝過來刪改包路徑即可。

通過MapperFactoryBean創建代理對象

因為UserMapper不是接口類型,所以要用MapperFactoryBean來生成接口類型

淺析Spring和MyBatis整合及逆向工程

此方法問題:

需要針對每個mapper進行配置,麻煩。

通過MapperScannerConfigurer進行mapper掃描(建議使用)

淺析Spring和MyBatis整合及逆向工程

* 這里通過basePackage屬性配置了mapper的掃描路徑后,在SqlMapperConfig.xml中就不用配置掃描路徑了。

淺析Spring和MyBatis整合及逆向工程

這里使用sqlSessionFactoryBeanName屬性是因為如果配置的是sqlSessionFactory屬性,將不會先加載數據庫配置文件及數據源配置(db.properties)

淺析Spring和MyBatis整合及逆向工程

測試代碼

淺析Spring和MyBatis整合及逆向工程

逆向工程

mybaits需要程序員自己編寫sql語句,mybatis官方提供逆向工程 可以針對單表自動生成mybatis執行所需要的代碼(mapper.java,mapper.xml、po..)

企業實際開發中,常用的逆向工程方式:由于數據庫的表生成java代碼。

下載逆向工程

淺析Spring和MyBatis整合及逆向工程

使用方法(會用)運行逆向工程

淺析Spring和MyBatis整合及逆向工程

建議使用java程序方式,不依賴開發工具。

生成代碼配置文件(有4處需要修改的地方)

生成PO類的位置 : cn.itcast.ssm.po

mapper映射文件生成的位置 : cn.itcast.ssm.mapper

mapper接口生成的位置 : cn.itcast.ssm.mapper

指定數據庫表:

?
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<table tableName="items"></table>
<table tableName="orders"></table>
<table tableName="orderdetail"></table>
<table tableName="user"></table>
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自動生成的注釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
password="mysql">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和
NUMERIC 類型解析為java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO類的位置 -->
<javaModelGenerator targetPackage="cn.itcast.ssm.po"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
<!-- 從數據庫返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="cn.itcast.ssm.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.itcast.ssm.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定數據庫表 -->
<table tableName="items"></table>
<table tableName="orders"></table>
<table tableName="orderdetail"></table>
<table tableName="user"></table>
</context>
</generatorConfiguration>

執行生成程序

淺析Spring和MyBatis整合及逆向工程

生成后的代碼

淺析Spring和MyBatis整合及逆向工程

使用生成的代碼

需要將生成工程中所生成的代碼拷貝到自己的工程中。

測試ItemsMapper中的方法

?
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
26
27
28
29
30
31
32
33
34
35
36
//自定義條件查詢
@Test
public void testSelectByExample() {
ItemsExample itemsExample = new ItemsExample();
//通過criteria構造查詢條件
ItemsExample.Criteria criteria = itemsExample.createCriteria();
criteria.andNameEqualTo("筆記本3");
//可能返回多條記錄
List<Items> list = itemsMapper.selectByExample(itemsExample);
System.out.println(list);
}
//根據主鍵查詢
@Test
public void testSelectByPrimaryKey() {
Items items = itemsMapper.selectByPrimaryKey(1);
System.out.println(items);
}
//插入
@Test
public void testInsert() {
//構造 items對象
Items items = new Items();
items.setName("手機");
items.setPrice(999f);
itemsMapper.insert(items);
}
//更新數據
@Test
public void testUpdateByPrimaryKey() {
//對所有字段進行更新,需要先查詢出來再更新
Items items = itemsMapper.selectByPrimaryKey(1);
items.setName("水杯");
itemsMapper.updateByPrimaryKey(items);
//如果傳入字段不空為才更新,在批量更新中使用此方法,不需要先查詢再更新
//itemsMapper.updateByPrimaryKeySelective(record);
}

以上所述是小編給大家介紹的淺析Spring和MyBatis整合及逆向工程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/lutianfeiml/article/details/51781389

延伸 · 閱讀

精彩推薦
  • JAVA教程詳解Java設計模式編程中命令模式的項目結構實現

    詳解Java設計模式編程中命令模式的項目結構實現

    這篇文章主要介紹了Java設計模式編程中命令模式的項目結構實現,命令模式將請求與執行分離,可以多個命令接口的實現類,隱藏真實的被調用方,需要的朋友...

    匆忙擁擠repeat1772020-04-20
  • JAVA教程Vert-x-通過異步的方式使用JDBC連接SQL

    Vert-x-通過異步的方式使用JDBC連接SQL

    在這篇文章中,我們將會看到怎樣在vert.x應用中使用HSQL,當然也可以使用任意JDBC,以及使用vertx-jdbc-client提供的異步的API,這篇文章的代碼在github ...

    不安分的碼農3082020-03-22
  • JAVA教程Java中for循環的執行過程分析

    Java中for循環的執行過程分析

    這篇文章主要介紹了Java中for循環的執行過程,實例分析了for循環的執行原理與順序,對于深入理解Java具有一定參考借鑒價值,需要的朋友可以參考下 ...

    Benjamin_whx2512019-12-09
  • JAVA教程java字符串切割實例學習(獲取文件名)

    java字符串切割實例學習(獲取文件名)

    在Java中處理一些路徑相關的問題的時候,如要取出ie瀏覽器上傳文件的文件名,由于ie會把整個文件路徑都作為文件名上傳,需要用java.lang.String中的replac...

    java教程網5132019-10-24
  • JAVA教程Java基礎教程_判斷語句if else

    Java基礎教程_判斷語句if else

    下面小編就為大家帶來一篇Java基礎教程_判斷語句if else。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian4212020-05-12
  • JAVA教程用Java實現希爾排序的示例

    用Java實現希爾排序的示例

    問題:現有一段程序S,可以對任意n個數進行排序。如果現在需要對n^2個數進行排序,最少需要調用S多少次?只允許調用S,不可以做別的操作。我們用希爾...

    java教程網3972019-10-20
  • JAVA教程Java性能優化技巧匯總

    Java性能優化技巧匯總

    這篇文章主要介紹了Java性能優化技巧,匯總了提升java程序性能的常用技巧,非常具有實用價值,需要的朋友可以參考下 ...

    司青1772019-12-16
  • JAVA教程java使用任務架構執行任務調度示例

    java使用任務架構執行任務調度示例

    在Java 5.0之前啟動一個任務是通過調用Thread類的start()方法來實現的,5.0里提供了一個新的任務執行架構使你可以輕松地調度和控制任務的執行,并且可以建...

    java教程網1752019-10-31
主站蜘蛛池模板: 国产福利在线免费观看 | 色依依视频视频在线观看 | 91麻豆精品国产 | 国产性色视频 | 日韩无砖2021特黄 | 日本道在线播放 | 午夜无码片在线观看影院 | 久久久久国产一级毛片高清片 | 美女脱了内裤让男生尿囗 | 国产欧美日韩精品一区二区三区 | 男人的j进入女人的j免费 | 亚洲成人99 | 我将她侵犯1~6樱花动漫在线看 | 女人爽到喷水的视频免费 | 日韩欧美高清一区 | 好 舒服 好 粗 好硬 好爽 | 男人的天堂va | 日韩精品一区二区三区中文在线 | 日韩在线视频在线 | 思思久久精品在热线热 | 96日本xxxxxxxxx70| 美女扒开胸罩露出奶 | 金牛网155755水心论坛黄大父母 | 日韩一| 久久国产乱子伦精品免费不卡 | 精品牛牛影视久久精品 | 秋霞午夜视频 | 国产色在线观看 | 特级夫妻大片免费在线播放 | 久青草国产在视频在线观看 | 九九热国产视频 | 日本五级床片全都免费播放 | 国产精品午夜剧场 | 极品美女a∨片在线看 | 男人的j放进女人的p全黄 | 国产欧美日韩精品一区二区三区 | 男人插曲女人身体 | 婷婷久久精品 | 狠狠色狠狠色综合婷婷tag | 99久久一区二区精品 | 99久女女精品视频在线观看 |