知识大全 基于Spring+Ibatis的安全线程实现

Posted 操作

篇首语:落花踏尽游何处,笑入胡姬酒肆中。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 基于Spring+Ibatis的安全线程实现相关的知识,希望对你有一定的参考价值。

基于Spring+Ibatis的安全线程实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  过去做过一些基于spring hibernate整合应用的实例 本人感觉spring与hibernate最好的结合就是泛型Dao的实现 代码量节省了一半 而且业务逻辑一目了然

  后来做别的系统时候考虑过这样的框架 但是数据库结构如果不固定 动态生成的东西比较多这个时候只好放弃了hibernate而选择了同样具有orm性能的ibatis 下面就spring与ibatis的结合相关配置做下说明(如有不同意见 希望交流)

  首先spring和ibatis具体下载和安装就不多说了 直接切入正题

  Spring框架下的ibatis应用 特别是在容器事务管理模式下的ibatis应用开发

  部署如下

  首先spring配置文件

  Spring_base xml

  <?xml version= encoding= UTF ?>

  <!DOCTYPE beans PUBLIC //SPRING//DTD BEAN//EN beans dtd >

  <beans default lazy init= true >

  <! 配置数据源 >

  <bean id= dataSource class= mons dbcp BasicDataSource destroy method= close >

  <property name= driverClassName >

  <value>net sourcefe jtds jdbc Driver</value>

  </property>

  <property name= url >

  <value>jdbc:jtds:sqlserver://localhost: /test</value>

  </property>

  <property name= username >

  <value>sa</value>

  </property>

  <property name= password >

  <value>sa</value>

  </property>

  <property name= maxActive >

  <value> </value>

  </property>

  <property name= maxIdle >

  <value> </value>

  </property>

  <property name= maxWait >

  <value> </value>

  </property>

  </bean>

  /////////////////// dataSource 配置你的数据源连接

  <bean id= sqlMapClient

  class= springframework orm ibatis SqlMapClientFactoryBean >

  <property name= configLocation >

  <value>SqlMap_config xml</value>

  </property>

  <property name= dataSource ><! 从指定dataSource中获取数据源 亦可把该定义放到每个自定义Dao中 >

  <ref bean= dataSource />

  </property>

  </bean>

  //////////////////// sqlMapClient 集成ibatis配置文件和把数据源与ibatis相关联

  <! 配置事务管理 >

  <bean id= transactionManager class= springframework jdbc datasource DataSourceTransactionManager >

  <property name= dataSource >

  <ref local= dataSource />

  </property>

  </bean>

  ///////////////// transactionManager:配置事务管理

  <! 公共组件 >

  <import resource= spring_other xml />

  ////////////把用户自定义Bean与基本bean分开 集成进去spring_other xml文件

  </beans>

  以上是spring 把一些ibatis相关配置集成到自己的配置文件里面

  Spring_other xml

  <?xml version= encoding= UTF ?>

  <!DOCTYPE beans PUBLIC //SPRING//DTD BEAN//EN beans dtd >

  <beans>

  <bean id= userService class= user UserServiceImpl >

  <property name= transactionManager >

  <ref bean= transactionManager />

  </property>

  <property name= userDao >

  <ref local= userDao />

  </property>

  </bean>

  ////////////////////////使用service管理所有用户自定义bean和Dao操作 用来设置事务回滚 线程安全等

  <bean id= userDao class= user dao UserDaoImpl >

  <property name= sqlMapClient ref= sqlMapClient />

  </bean>

  ///////////////用户自定义Dao操作 因spring_base xml中sqlMapClient已经把dataSource包含 故dataSource不再声明 如果该操作需要别的数据连接 可加入例如

  ////////<property name= dataSource ref= dataSource />//////////

  </beans>

  Spring_other xml存放用户自定义bean

  SqlMap_config xml

  <?xml version= encoding= UTF ?>

  <!DOCTYPE sqlMapConfig

  PUBLIC ////DTD SQL Map Config //EN

   map config dtd >

  <sqlMapConfig>

  <settings lazyLoadingEnabled= true

  useStatementNamespaces= true

  enhancementEnabled= true

  errorTracingEnabled= true

  />

  /////////////定义ibatis相关操作参数 例如延迟加载 命名空间是否生效 是否打开缓存 调试阶段出错信息反馈等等

  <sqlMap resource= /user/user xml />

  //////////////包含用户的相关操作xml文件

  </sqlMapConfig>

  User xml

  <?xml version= encoding= UTF ?>

  <!DOCTYPE sqlMap

  PUBLIC ////DTD SQL Map //EN

   map dtd >

  <sqlMap namespace= User >

  <typeAlias alias= user type= user User /><! obj >

  <!   get user >

  <select id= getUser

  parameterClass= java lang String

  resultClass= user >

  <![CDATA[

  select

  id

  name

  sex

  from

  t_user

  where name like #name#

  ]]>

  </select>

  <! update user >

  <update id= updateUser parameterClass= user >

  <![CDATA[

  update t_user

  set

  name=#name#

  sex=#sex#

  where id = #id#

  ]]>

  </update>

  <insert id= insertUser parameterClass= user >

  <![CDATA[

  insert into t_user(

  id

  name

  sex)

  values(

  #id#

  #name#

  #sex#

  )

  ]]>

  </insert>

  <delete id= deleteUser parameterClass= java lang String >

  <![CDATA[

  delete from t_user

  where id = #value#

  ]]>

  </delete>

  <select id= selectUser   resultClass= user >

  <![CDATA[

  select * from t_user order by id desc

  ]]>

  </select>

  </sqlMap>

  该配置文件属性就不多了 用户可在网上搜一堆够看了

  针对spring_other xml 里面的用户自定义bean如下

  UserDao java 接口

  package user dao;

  import java util List;

  import user User;      

  public interface UserDao

  public User getUser(String name);

  public void updateUser(User user);

  public List selectUser();

  public void insertUser(User user);

  

  UserDaoImpl java 实现类

  package user dao;   

  import java util List;   

  import springframework orm ibatis support SqlMapClientDaoSupport;   

  import user User;       

  public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao

  //private static Logger log = Logger getLogger(UserDaoImpl class);

  public User getUser(String name)

  return (User) this getSqlMapClientTemplate() queryForObject( User getUser name );

     

  public void updateUser(User user)

  this getSqlMapClientTemplate() update( User updateUser user);

     

  public List selectUser()

  return this getSqlMapClientTemplate() queryForList( User selectUser );

  

  public void insertUser(User user)

  this getSqlMapClientTemplate() insert( User insertUser user);

  

  

  现在大家也许看到这里觉得就差不多了 该Dao方法差不多全了 可以进行操作了 其实不然 下面我载自官方的一段

  Spring提供两种方式的编程式事务管理 分别是 使用TransactionTemplate和直接使用PlatformTransactionManager   ⅰ TransactionTempale采用和其他Spring模板 如JdbcTempalte和HibernateTemplate一样的方法 它使用回调方法 把应用程序从处理取得和释放资源中解脱出来 如同其他模板 TransactionTemplate是线程安全的

  所以我们下面我们要再封装一层以实现线程是安全的 这就是我们在spirng_other xml里面的那段配置实现

  baseService java

  package base;

  import springframework transaction support TransactionTemplate;

  /**

  * 工厂的基础类.

  * @author 刘玉华

  * @time

  */

  public class BaseService extends TransactionTemplate

  private static final long serialVersionUID = L;

  

  serviceFactory java

  package base;   

  import springframework beans factory BeanFactory;

  import ntext support ClassPathXmlApplicationContext;   

  import user dao UserDao;   

  /**

  * 数据操作工厂 所有的数据操作都从该工厂中获得

  * @author 刘玉华

  * @time

  */   

  public class ServiceFactory

  private static BeanFactory factory = null;   

  static

  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

  new String[] spring_base xml );

  factory = (BeanFactory) context;

         

  /**

  * 获得用户服务类

  * @return 用户服务

  */

  public static UserDao getUserService()

  return (UserDao) factory getBean( userService );

  

  

  我们所需要做的就是继承Baseservice java 以实现tx管理

  UserService java

  package user;

  import java util List;

  public interface UserService

  public User getUser(final String name);

  public void updateUser(final User user);

  public List selectUser();

  public void insertUser(final User user);

  

  UserServiceImpl java 用户服务实现类

  package user;   

  import java util List;   

  import springframework transaction TransactionStatus;

  import springframework transaction support TransactionCallback;

  import base BaseService;

  import user dao UserDao;

  public class UserServiceImpl extends BaseService implements UserDao

  private UserDao userDao;

  public UserDao getUserDao()

  return userDao;

  

  public void setUserDao(UserDao userDao)

  this userDao = userDao;

  

  public List selectUser()

  Object obj = execute(new TransactionCallback()

  public Object doInTransaction(TransactionStatus status)

  return userDao selectUser();

  

  );

  return (List)obj;

  

  public User getUser(final String name)

  Object obj = execute(new TransactionCallback()

  public Object doInTransaction(TransactionStatus status)

  // TODO Auto generated method stub

  return userDao getUser(name);

  

  );

  return (User) obj;

  

  public void insertUser(final User user)

  Object obj = execute(new TransactionCallback()

  public Object doInTransaction(TransactionStatus status)

  userDao insertUser(user);

  return null;

  

  );

  

  public void updateUser(final User user)

  Object obj = execute(new TransactionCallback()

  public Object doInTransaction(TransactionStatus arg )

  userDao updateUser(user);

  return null;

  

  );

  

     

      这样我们就把相关操作实现事务控制了

  数据表建立

  create table t_user(

   id int null

   name varchar( ) null

   sex int null

  )

  这样我们在以后调用方式为

  测试类

  package user junit;   

  import java util List;   

  import base ServiceFactory;

  import user User;

  import user dao UserDao;

  import mon Logger;

  public class UserTest

  private static Logger log = Logger getLogger(UserTest class);

  public static void main(String args[])

  UserDao service = ServiceFactory getUserService();

  User user=null;

  int i = ;

  switch (i)

  case :

  user setId( );

  user setName( );

  user setSex( );

  service updateUser(user);

  System out println(user getName()+ +user getSex());

  break;

  case :

  try

  user = service getUser( );

   catch (Exception e)

  log debug( 出错了 +e getMessage());

  

  System out println(user getId());

  case :

  List<User> ls = service selectUser();

  for (int j = ; j < ls size(); j++)

  System out println(ls get(j) getId()+ ==== +ls get(j) getName());

  

  case :

  List<User> ls = service selectUser();

  for (int j = ; j < ls size(); j++)

  user = ls get(j);

  System out println(user getId()+user getName()+user getSex()+user getAddress());

  

  for (int j = ; j < ; j++)

  user setId(user getId()+ );

  service insertUser(user);

  

  default:

  break;

  

  

cha138/Article/program/Java/ky/201311/28732

相关参考

知识大全 spring struts2 ibatis框架整合开发

这里主要介绍一下spring+struts+ibatis所需要的jar包文件spring所需包  以上包为spring配置基本包ibatis所需包  有解决方法的朋友们希望能回复  与struts整合

知识大全 Spring+Ibatis+事务处理

Spring+Ibatis+事务处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  applic

知识大全 使用Spring解决ibatis多数据源的苦恼

使用Spring解决ibatis多数据源的苦恼  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  i

知识大全 基于Java 2运行时安全模型的线程协作

基于Java2运行时安全模型的线程协作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java

知识大全 基于SPRING的应用增加简单规则引擎

基于SPRING的应用增加简单规则引擎  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要   

知识大全 基于Spring框架的WebSphere应用开发

基于Spring框架的WebSphere应用开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 基于Spring实现seam形式的事件机制

基于Spring实现seam形式的事件机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Sea

知识大全 基于Eclipse开发轻量级Spring插件

基于Eclipse开发轻量级Spring插件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要

知识大全 基于OSGi和Spring开发Web应用

基于OSGi和Spring开发Web应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作为一个

知识大全 基于.NET的多线程编程入门

基于.NET的多线程编程入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!多线程在构建大型系统的时