程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 淺析Spring和MyBatis整合及逆向工程

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

編輯:關於JAVA

淺析Spring和MyBatis整合及逆向工程。本站提示廣大學習愛好者:(淺析Spring和MyBatis整合及逆向工程)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析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)

工程構造

第一步:整合設置裝備擺設sqlSessionFactory

在applicationContext.xml設置裝備擺設sqlSessionFactory和數據源

sqlSessionFactory在mybatis和spring的整合包下。

<!-- 加載設置裝備擺設文件 -->
<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

在SqlMapconfig.xml中加載User.xml

dao(完成類繼續SqlSessionDaoSupport)

之前dao接話柄現類須要注入SqlSessoinFactory,經由過程spring停止注入。

這裡應用spring聲明設置裝備擺設方法,設置裝備擺設dao的bean:

讓UserDaoImpl完成類繼續SqlSessionDaoSupport

設置裝備擺設dao

在applicationContext.xml中設置裝備擺設dao接口

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

測試法式

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來生成接口類型

此辦法成績:

須要針對每一個mapper停止設置裝備擺設,費事。

經由過程MapperScannerConfigurer停止mapper掃描(建議應用)

 

* 這裡經由過程basePackage屬性設置裝備擺設了mapper的掃描途徑後,在SqlMapperConfig.xml中就不消設置裝備擺設掃描途徑了。

這裡應用sqlSessionFactoryBeanName屬性是由於假如設置裝備擺設的是sqlSessionFactory屬性,將不會先加載數據庫設置裝備擺設文件及數據源設置裝備擺設(db.properties)

測試代碼

逆向工程

mybaits須要法式員本身編寫sql語句,mybatis官方供給逆向工程 可以針對單表主動生成mybatis履行所須要的代碼(mapper.java,mapper.xml、po..)

企業現實開辟中,經常使用的逆向工程方法:因為數據庫的表生成java代碼。

下載逆向工程

應用辦法(會用)運轉逆向工程

建議應用java法式方法,不依附開辟對象。

生成代碼設置裝備擺設文件(有4處須要修正的處所)

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

mapper映照文件生成的地位 : cn.itcast.ssm.mapper

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

指定命據庫表:

<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>

履行生成法式

生成後的代碼

應用生成的代碼

須要將生成工程中所生成的代碼拷貝到本身的工程中。

測試ItemsMapper中的辦法

//自界說前提查詢
@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整合及逆向工程,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved