spring框架整合ibatis的專案例項程式碼
這兩天一直在研究ibatis與spring的整合 一個小小的demo搞的我頭暈目眩的,但程式一旦跑起來了,突然有一種豁然開朗,重見天日,感覺生活很美好的感覺!,也許,這就是那一行行的程式碼帶給我們的不同享受吧。呵呵,廢話就不多說了。
在此先引用幾句別人的資料。。。
Spring通過DAO模式,提供了對iBATIS的良好支援。SqlMapClient物件是iBATIS中的主要物件,我們可以通過配置讓spring來管理SqlMapClient物件的建立。
與hibernate類似,Spring提供了SqlMapClientDaoSupport物件,我們的DAO可以繼承這個類,通過它所提供的SqlMapClientTemplate物件來操縱資料庫。看起來這些概念都與hibernate類似。
通過SqlMapClientTemplate來操縱資料庫的CRUD是沒有問題的。此篇文章沒有進行事務處理。
本文采用ibatis+spring+mysql 進行編寫
資料庫指令碼如下
create database ibatis;
create table person(
id int primary key,
name varchar(10),
sex int
);
一:要有一個PO類
Person.java
package com.zuidaima.po; import java.io.Serializable; public class Person implements Serializable{ /** * */ private static final long serialVersionUID = -517413165963030507L; /** * */ private int id; private String name; private int sex; public Person(){ } public Person(int id,String name,int sex){ this.id = id; this.name = name; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } }
二:DAO介面類
IAction.java
package com.zuidaima.dao; import java.util.List; import po.Person; public interface IAction { public boolean insertPerson(Person person); //新增 public boolean deleteById(int id); //刪除 public boolean updatePerson(Person person); //修改 public Person queryById(int id); //根據ID查詢 public List<Person> queryAllPerson(); //查詢全部 }
三:DAO實現類
ActionImpl.java 此類繼承SqlMapClientSupport 實現IAction介面
package com.zuidaima.dao.impl;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.sqlmap.client.SqlMapSession;
import po.Person;
import dao.IAction;
public class ActionImpl extends SqlMapClientDaoSupport implements IAction {
//新增操作
@Override
public boolean insertPerson(Person person) {
// TODO Auto-generated method stub
getSqlMapClientTemplate().insert("insertPerson",person);
return false;
}
//刪除操作
@Override
public boolean deleteById(int id) {
// TODO Auto-generated method stub
getSqlMapClientTemplate().delete("deleteById", id);
return false;
}
//查詢全部
@Override
public List<Person> queryAllPerson() {
// TODO Auto-generated method stub
List<Person> persons = getSqlMapClientTemplate().queryForList("queryAllPerson");
return persons;
}
@Override
public Person queryById(int id) {
// TODO Auto-generated method stub
//自己新增實現程式碼
return null;
}
@Override
public boolean updatePerson(Person person) {
// TODO Auto-generated method stub
//自己新增實現程式碼
return false;
}
四:既然是ibatis spring整合 那就必須要有ibatis的配置檔案
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <!--此處一定不能有<settings/> 標籤--> <!-- <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> --> <sqlMap resource="po/Person.xml" /> </sqlMapConfig>
SqlMapClient.xml裡本應該有資料來源的配置的 使用spring之後資料來源的配置移植到了spring上
五:Person.xml
裡面配置了一下對資料的增刪改查操作
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap> <typeAlias alias="person" type="po.Person" /> <insert id="insertPerson" parameterClass="po.Person"> <![CDATA[ insert into person values (#id#,#name#,#sex#) ]]> </insert> <delete id="deleteById" parameterClass="int"> <![CDATA[ delete from person where id=#id# ]]> </delete> <update id="updatePerson" parameterClass="po.Person"> <![CDATA[ update person set name=#name#,sex=#sex# where id=#id# ]]> </update> <select id="queryById" parameterClass="int" resultClass="po.Person"> <![CDATA[ select * from person where id=#id# ]]> </select> <select id="queryAllPerson" cacheModel="personCache" resultClass="po.Person"> <![CDATA[ select * from person ]]> </select> </sqlMap>
六:下面最重要的也就是配置applicationContext.xml了
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/ibatis" /> <property name="username" value="root" /> <property name="password" value="1" /> </bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <!-- name 為configLocation或s 不可為其他 --> <value>SqlMapConfig.xml</value> <!-- 不區分大小寫,路徑前可加'/' --> </property> <!-- dataSource不是必需 --> <property name="dataSource"> <ref local="dataSource" /> </property> </bean> <bean id="personDAO" class="dao.impl.ActionImpl"> <!-- dataSource不是必需 --> <property name="dataSource"> <ref local="dataSource" /> </property> <!-- sqlMapClient必需 --> <property name="sqlMapClient"> <ref local="sqlMapClient"/> </property> </bean> <!-- transactionManager不是必需 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref local="dataSource" /> </property> </bean> </beans>
註釋裡面的必需或不是必需都是本人多次試驗的,至於為什麼是必需不必需 其中的原理我也不是能太講清楚,在此先是這些寫罷了。
裡面的每一個節點,屬性,如果不太理解,可以上網查一些其他資料。
七:編寫測試類
此類利用junit進行測試。只測試了部分功能。
package com.zuidaima.dao.impl;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import po.Person;
public class ActionImplTest {
private static ApplicationContext applicationContext = null; //提供靜態ApplicationContext
static{
applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //例項化
}
//新增操作
@Test
public void testInsertPerson(){
ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");
s.insertPerson(new Person(1,"zhangsan",2));
}
//刪除操作
@Test
public void testDeletePerson(){
ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");
s.deleteById(1);
}
//查詢全部
@Test
public void testQueryAllPerson(){
ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");
List<Person> persons = s.queryAllPerson();
//System.out.println(persons.size());
Iterator<Person> ite = persons.iterator();
while(ite.hasNext()){
Person person = ite.next();
System.out.print("ID: "+person.getId());
System.out.print(" Name: "+person.getName());
System.out.print(" Sex: "+person.getSex());
System.out.println();
}
}
}
八:如需記錄日誌 則要log4j.properties
#log4j.rootLogger=DEBUG, stdout #log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n #log4j.logger.java.sql.PreparedStatement=DEBUG log4j.rootLogger=DEBUG, stdout, fileout #log4j.logger.test=info #log4j.logger.org.apache.jasper = DEBUG #log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG #log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG log4j.logger.com.fiscal = DEBUG log4j.logger.com.system = DEBUG log4j.logger.com.ibatis = DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG log4j.logger.java.sql.Connection = DEBUG log4j.logger.java.sql.Statement = DEBUG log4j.logger.java.sql.PreparedStatement = DEBUG, fileout log4j.logger.java.sql.ResultSet = DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.fileout=org.apache.log4j.RollingFileAppender log4j.appender.fileout.File=C\:\\ibatis.log log4j.appender.fileout.MaxFileSize=10000KB log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n log4j.appender.fileout.layout=org.apache.log4j.PatternLayout log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n #log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout # log4j.logger.org=info
九:已經到最後了,我覺得這最後的才是最最重要的,就是一下jar包問題
我除錯了很長時間 一大部分時間是jar問題
在此列出一下我認為能夠跑起來這個小程式所需的一下jar包
如沒有,可網上下載。
- ibaits-2.3.4.jar
- spring.jar
- mysql-connector-java-bin.jar
- commons-dbcp-1.4.jar
- commons-pool-1.5.6.jar
- spring-orm-2.5.6.jar //已整合到spring.jar裡
- //記錄日誌所需
- log4j-1.2.15.jar
- commons-logging.jar
下面是本人的目錄結構圖
相關推薦
spring框架整合ibatis的專案例項程式碼
這兩天一直在研究ibatis與spring的整合 一個小小的demo搞的我頭暈目眩的,但程式一旦跑起來了,突然有一種豁然開朗,重見天日,感覺生活很美好的感覺!,也許,這就是那一行行的程式碼帶給我們的不同享受吧。呵呵,廢話就不多說了。 在此先引用幾句別人的資料。。。
java計劃任務排程框架quartz結合spring實現排程的配置例項程式碼分享
一:quartz簡介 OpenSymphony 的Quartz提供了一個比較完美的任務排程解決方案。 Quartz 是個開源的作業排程框架,定時排程器,為在 Java 應用程式中進行作業排程提供了簡單卻強大的機制。 Quartz中有兩個基本概
spring boot整合Angular專案實戰
1.使用IDEA進行debug,然後進行資料的跟蹤。 根據debug的前端傳過來的資料流如下; 根據deug斷點除錯可知此時應該進入的是serviceimpl層的邏輯層程式碼。打斷點進入pipeCabinServeice的updatePipeCabin方法。 找到實現類所對應
複習電商筆記-35-常見問題、RedisCluster和Spring框架整合
常見問題 another app is currently holding the yum…. 直接 ps –ef|grep yum 殺掉就行了 ERR Slot 5798 is already busy Ca
spring boot 整合 mybatis(含程式碼自動生成)
環境簡介:Idea ,JDK8,MAVEN 開工: 第一步建立專案 第二步選擇maven依賴 第三步,補充自己需要用到的maven依賴(通過工具沒法自動完成的) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="
Spring框架整合WEB解決配置檔案載入多次的問題
1. 建立JavaWEB專案,引入Spring的開發包。編寫具體的類和方法。 * 環境搭建好後,啟動伺服器來測試專案,傳送每訪問一次都會載入一次配置檔案,這樣效率會非常非常慢!! 2. 解決上面的問題 * 將工廠建立好了以後放入到ServletContext域中.使用工廠的時候,從Servl
Spring框架整合WEB解決配置文件加載多次的問題
load cti style customer ner ssp text param work 1. 創建JavaWEB項目,引入Spring的開發包。編寫具體的類和方法。 * 環境搭建好後,啟動服務器來測試項目,發送每訪問一次都會加載一次配置文件,這樣效率會非常非
3 Spring框架整合WEB 1(與struts2整合)
使用spring與struts2整合 web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in
Spring框架整合Struts2框架的傳統方法
1. 匯入CRM專案的UI頁面,找到新增客戶的頁面,修改form表單,訪問Action * 將menu.jsp中133行的新增客戶的跳轉地址改為:href="${pageContext.request.contextPath}/jsp/customer/add.jsp" * 將jsp/custom
Spring Boot整合Thymeleaf簡單例項
1、定義 Thymeleaf是一種用於Web和獨立環境的現代伺服器端的Java模板引擎。 2、簡單例項 (1)目錄結構 (2)MySpringBootApplication.java pa
Java框架JSON-RPC專案demo程式碼實戰
一、JSON-RPC-Java簡介 JSON-RPC-Java是一個用Java來實現動態JSON-RPC的框架. 利用它內建的一個輕級量JSON-RPC JavaScripIt客戶端,可以讓你透明地在JavaScript中呼叫Java程式碼。JSON-
Spring框架整合Java Web Token
Java Web Token JSON Web Token(JWT)是一個非常輕巧的規範。這個規範允許我們使用JWT在使用者和伺服器之間傳遞安全可靠的資訊。 JWT組成 一個JWT實際上就是一個字串,它由三部分組成,頭部、載荷與簽名。 荷載 {
spring mvc攔截器專案例項
處理器攔截器簡介:1.1.1攔截器介面package org.springframework.web.servlet; public interface HandlerInterceptor { boolean preHandle(
Spring框架的WEB專案訪問不到靜態資原始檔
最近遇見一個很白痴的問題,但還是犯了,就是在jsp頁面中訪問不到jquery檔案了,找了很多辦法,改了很多次路徑,還是不對,最後發現是SpringMVC的配置出錯了; <servlet>
activeMQ開發筆記,activeMQy與Spring框架整合
MQ開發其實很簡單: 本文以最新版本的ActiveMQ為例子,介紹了安裝和開發第一個MQ程式。 準備環境,JDK8,activeMQ 5.14.3,WIN7測試環境,Spring 4.3.4 首先是安裝 : 安裝MQ非常簡單,下載連結:https://activemq
redis入門+基於Ruby的redis叢集搭建+spring框架整合
定義 redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援p
Java Spring MVC專案搭建(一)——Spring MVC框架整合
轉自:https://www.cnblogs.com/eczhou/p/6287852.html 1、Java JDK及Tomcat安裝 我這裡安裝的是JDK 1.8 及 Tomcat 8,安裝步驟詳見:http://www.cnblogs.com/eczhou/p/6285248.html
基於springboot2 框架整合(1):spring boot專案初始化
前言 專案中使用了很多現成的框架,都是專案經理、架構師帶來的,從來沒有自己整合過!這次決定自己從零開始整合一次,以學習鞏固。過程中參考很多開源框架的思路,工具類等,若有侵權,請速速聯絡,一定妥善處理 一:建立maven專案 這個不多說,給出pom.xml
SSM框架整合Maven工程整合Spring+Springmvc+Mybatis(詳細教程,附程式碼)
一、基本概念 1、Spring Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分