Struts+iBatis+Spring+mysql整合开发

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

转载请注明:http://www.cnblogs.com/tiantianbyconan/archive/2013/03/03/2941554.html

本文使用Struts+iBatis+Spring三层框架开实现对user表的CRUD。

分层如下:

 

iBatis配置文件(sqlMapConfig.xml):

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>

    <settings cacheModelsEnabled="true" enhancementEnabled="true"
        lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32"
        maxSessions="10" maxTransactions="5" useStatementNamespaces="false" />

    <sqlMap resource="com/tiantian/ibatis/model/user.xml" />
    
</sqlMapConfig>
复制代码

 

struts.xml:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="ibatis_test" extends="struts-default">
        <!-- 注册User action -->
        <action name="registerUser" class="registerUserAction">
        </action>
        <!-- 删除User action -->
        <action name="deleteUser" class="deleteUserAction">
        </action>
        <!-- 更新User action -->
        <action name="updateUser" class="updateUserAction">
        </action>
        <!-- 查询所有User action -->
        <action name="findAllUsers" class="findAllUsersAction">
        </action>
        <!-- 查询指定id的User action -->
        <action name="findUserById" class="findUserByIdAction">
        </action>
        <!-- 模糊查询User action -->
        <action name="findUsersBykeyword" class="findUsersBykeywordAction">
        </action>
        
    </package>
    
</struts>
复制代码

 

user.xml配置文件:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
    <!-- 为Student类取个别名 -->
    <typeAlias alias="UserAlias" type="com.tiantian.ibatis.model.User"/>
    
    <!-- 配置表和实体Bean之间的映射关系 -->  
    <resultMap id="userMap" class="com.tiantian.ibatis.model.User">  
        <result property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="age" column="age"/>
    </resultMap>
    <!-- 添加数据 -->
    <insert id="registerUser" parameterClass="UserAlias">
        INSERT INTO user VALUES (NULL, #username#, #password#, #age#);
    </insert>
    <!-- 删除指定id的数据 -->
    <delete id="deleteUser" parameterClass="UserAlias">
        DELETE FROM user WHERE id = #id#;
    </delete>
    <!-- 修改指定id的数据 -->
    <update id="updateUser" parameterClass="UserAlias">
        UPDATE user 
        SET username = #username#, password = #password#, age = #age#
        WHERE id = #id#;
    </update>
    <!-- 查询所有User信息 -->
    <select id="findAllUsers" resultMap="userMap">
        SELECT * FROM user;
    </select>
    <!-- 查询指定id的User信息 -->
    <select id="findUserById" resultMap="userMap">
        SELECT * FROM user WHERE id = #id#;
    </select>
    <!-- 模糊查询 -->
    <select id="findUsersByKeyword" resultMap="userMap">
        SELECT * FROM user WHERE username LIKE '%$keyword$%';
    </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-3.0.xsd">
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="XXXX" />
        
        <property name="validationQuery" value="select user.id from user"></property>
        <property name="maxIdle" value="15"></property>
        <property name="maxActive" value="15"></property>
        <property name="maxWait" value="1000"></property>
    </bean>
    
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 事务管理 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 声明式事务管理 -->
    <bean id="baseTransactionProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
        abstract="true">
        <property name="transactionManager" ref="transactionManager"></property>
        <property name="transactionAttributes">
            <props>
                <!-- 
                    表示设置事务属性所有以"find"和"get"开头的方法:
                    - PROPAGATION_REQUIRED: 当前存在事务则使用存在的事务,如果不存在,则开启一个新的事务
                    - readOnly:表示只读的事务
                 -->
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
    <!-- *****************************以上一般只需修改数据库配置******************************** -->
    
    <!-- ********************************************************************* -->
    <!-- *******************************DAO*********************************** -->
    <!-- ********************************************************************* -->
    <!-- DAO、Service一般都配置成singleton(可以不写,因为默认是singleton) -->
    <bean id="userDao" class="com.tiantian.ibatis.dao.impl.UserDaoImpl" scope="singleton">
        <property name="sqlMapClient" ref="sqlMapClient"></property>
    </bean>
    
    <!-- ************************************************************************* -->
    <!-- *******************************Service*********************************** -->
    <!-- ************************************************************************* -->
    <!-- Service,没有事务功能 -->
    <bean id="userServiceTarget" class="com.tiantian.ibatis.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>
    <!-- Service的代理,目的是为Service添加事务的功能 -->
    <bean id="userService" parent="baseTransactionProxy">
        <property name="target" ref="userServiceTarget"></property>
    </bean>
    
    <!-- ************************************************************************ -->
    <!-- *******************************Action*********************************** -->
    <!-- ************************************************************************ -->
    <!-- Action一般都配置成prototype(必须要写!) -->
<!-- **User Actions** -->
    <bean id="registerUserAction" class="com.tiantian.ibatis.action.user.RegisterUserAction" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>
    <bean id="deleteUserAction" class="com.tiantian.ibatis.action.user.DeleteUserAction" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>
    <bean id="updateUserAction" class="com.tiantian.ibatis.action.user.UpdateUserAction" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>
    <bean id="findAllUsersAction" class="com.tiantian.ibatis.action.user.FindAllUsersAction">
        <property name="userService" ref="userService"></property>
    </bean>
    <bean id="findUserByIdAction" class="com.tiantian.ibatis.action.user.FindUserByIdAction">
        <property name="userService" ref="userService"></property>
    </bean>
    <bean id="findUsersBykeywordAction" class="com.tiantian.ibatis.action.user.FindUsersByKeywordAction">
        <property name="userService" ref="userService"></property>
    </bean>

</beans>
复制代码

 

DAO接口:

复制代码
/**
 * @author wangjie
 * @version 创建时间:2013-3-1 下午5:44:21
 */
public interface UserDao {
    public void registerUser(User user);
    public boolean deleteUser(User user);
    public boolean updateUser(User user);
    public List<User> findAllUsers();
    public User findUserById(User user);
    public List<User> findUsersByKeyword(String keyword);
}
复制代码

DAO实现类(执行各个Action所需的数据库查询操作):

复制代码
package com.tiantian.ibatis.dao.impl;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.tiantian.ibatis.dao.UserDao;
import com.tiantian.ibatis.model.User;

/**
 * @author wangjie
 * @version 创建时间:2013-3-1 下午6:09:53
 */
public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{

    public void registerUser(User user) {
        getSqlMapClientTemplate().insert("registerUser", user);
    }

    public boolean deleteUser(User user) {
        boolean result = false;
        int effectedRow = getSqlMapClientTemplate().delete("deleteUser", user);
        System.out.println("delete effectedRow: " + effectedRow);
        result = effectedRow > 0 ? true : false;
        return result;
    }

    public boolean updateUser(User user) {
        boolean result = false;
        int effectedRow = getSqlMapClientTemplate().update("updateUser", user);
        System.out.println("update effectedRow: " + effectedRow);
        result = effectedRow > 0 ? true : false;
        return result;
    }

    public List<User> findAllUsers() {
        return (List<User>)getSqlMapClientTemplate().queryForList("findAllUsers");
    }

    public User findUserById(User user) {
        return (User) getSqlMapClientTemplate().queryForObject("findUserById", user);
    }

    public List<User> findUsersByKeyword(String keyword) {
        return (List<User>)getSqlMapClientTemplate().queryForList("findUsersByKeyword", keyword);
    }
    
    
}
复制代码

Action类(以RegisterUserAction为例):

复制代码
package com.tiantian.ibatis.action.user;

import com.opensymphony.xwork2.ActionSupport;
import com.tiantian.ibatis.model.User;
import com.tiantian.ibatis.service.UserService;
import com.tiantian.ibatis.service.impl.UserServiceImpl;

/**
 * @author wangjie
 * @version 创建时间:2013-3-2 下午11:26:18
 */
public class RegisterUserAction extends ActionSupport{
    private UserService userService;
    private User user;
    
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    
    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @Override
    public String execute() throws Exception {
        userService.registerUser(user);
        System.out.println("数据已经插入");
        return null;
    }
}
复制代码

 

 本文转自天天_byconan博客园博客,原文链接:http://www.cnblogs.com/tiantianbyconan/archive/2013/03/03/2941554.html,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
66
分享
相关文章
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
354 43
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
74 6
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
2924 0
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
161 0
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
135 7
|
4月前
|
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
91 11
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
102 5
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
227 1

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等