- 浏览: 145089 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
hzyhush:
Java模拟登录新浪微博 -
meaemz:
大神,这是完整的代码吗?怎么没有没有main(),我要怎么调用 ...
Java模拟登录新浪微博 -
meaemz:
大神,这是完整的代码吗?怎么没有没有main(),是要自己写一 ...
Java模拟登录新浪微博 -
c_he_n:
最后执行结果怎么获取到url
Java模拟登录新浪微博 -
hvang1988:
18.JEgg Java多线程开发包 ,这个到底怎么样哦,资料 ...
Java 常用的第三方组件
1、这次使用spring和mybatis进行整合,使用spring的注解和自动扫描的方式将mybatis装载到程序中去。
2、首先看整个的工程包的截图
3、先来分析spring.mybatis.orm包下的类
1)、SqlMapl类属于数据库标识接口,用于spring中的配置使用。
2)、BaseSqlMap类,操作数据库的通用方法接口
3)、BaseEntity类,通用的实体类定义一些通用的属性
4)、MyBatisDao类,通用方法的实现类
5)、ReflectHelper类,工具类,通过java反射,获得定义类时声明的基类(父类)的泛型参数的类型.
接下来通过具体的实例来分析整合过程,使用一个用户表ad_user包含字段id、username、password。
4、根据表建立实体bean和mybatis的sql.xml文件配置
User类需要继承BaseEntity
user.sqlMap.xml的配置信息如下:
UserDao的实现,需要继承MyBatisDao,在UserDao中可以扩展自己的方法,@Repository注解表示该层为存储层。
UserService类业务层类,@Service表示该层为服务层,@Transactional放在类上表示每个公有方法都受事物管理,具体的管理方式在spring的配置文件中提现。
5、配置文件的分析
最主要的配置文件是applicationContext.xml,具体说明见代码中的注释部分
db.properties文件用于配置数据库连接信息
ehcache-application.xml用于配置缓存信息
log4j.properties用于配置日志信息
mybaits.sqlMap.xml无实际作用,这个里面的配置信息都在spring配置文件中进行配置了
6、测试的类TestMain
具体的项目代码见附件!
2、首先看整个的工程包的截图
3、先来分析spring.mybatis.orm包下的类
1)、SqlMapl类属于数据库标识接口,用于spring中的配置使用。
package spring.mybatis.orm; /** * 数据库访问标识接口 *@author TonyJ *@time 2015-1-31 下午03:41:17 *@email tanglongjia@126.com */ public interface SqlMap { }
2)、BaseSqlMap类,操作数据库的通用方法接口
package spring.mybatis.orm; /** *@author TonyJ *@time 2015-1-31 下午03:45:52 *@email tanglongjia@126.com */ public interface BaseSqlMap<T extends BaseEntity> extends SqlMap { /** * 保存 */ public static final String SQL_INSERT=".insert"; /** * 删除 */ public static final String SQL_DELETE=".delete"; /** * 更新 */ public static final String SQL_UPDATE=".update"; /** * 根据Id查询 */ public static final String SQL_SELECT_SINGLE = ".selectSingle"; /** * 查询单个 * @param param * @return */ T selectSingle(Object param); /** * 保存 * @param entity * @return */ T insert(T entity); /** * 更新 * @param entity * @return */ boolean update(T entity); /** * 删除一个 * @param param * @return */ boolean delete(Object param); }
3)、BaseEntity类,通用的实体类定义一些通用的属性
package spring.mybatis.orm; import java.io.Serializable; import java.util.Date; /** *@author TonyJ *@time 2015-1-31 下午03:37:46 *@email tanglongjia@126.com */ public class BaseEntity implements Serializable,Cloneable { /** * */ private static final long serialVersionUID = 2413960745071474764L; /** *标识Id */ private long id; /** * 用户名 */ private String userName; /** * 创建时间 */ private Date createTime; /** * 更新时间 */ private Date updateTime; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } }
4)、MyBatisDao类,通用方法的实现类
package spring.mybatis.orm; import org.apache.ibatis.session.SqlSession; import org.apache.log4j.Logger; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import spring.mybatis.utils.ReflectHelper; /** *@author TonyJ *@time 2015-1-31 04:43:08 *@email tanglongjia@126.com */ public class MyBatisDao<T extends BaseEntity> implements BaseSqlMap<T> { private static final Logger logger = Logger.getLogger(MyBatisDao.class); protected Class<T> entityClass; @Autowired protected SqlSessionTemplate sqlSession; @SuppressWarnings("unchecked") public MyBatisDao(){ this.entityClass = ReflectHelper.getSuperClassGenericType(getClass(), 0); } public SqlSession getSqlSession(){ return sqlSession; } public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } @Override public T selectSingle(Object param) { if(null == param){ logger.error("非法参数:param为空!"); throw new IllegalArgumentException("非法参数:param为空!"); } T result = null; try{ result = getSqlSession().selectOne(entityClass.getName()+SQL_SELECT_SINGLE, param); }catch(Throwable e){ logger.error(e); } return result; } @Override public T insert(T entity) { if(null == entity){ logger.error("参数对象为null!"); throw new IllegalArgumentException("参数不可为null!"); } try{ getSqlSession().insert(entityClass.getName()+SQL_INSERT, entity); }catch(Throwable e){ logger.error(e); return null; } return entity; } @Override public boolean update(T entity) { if(null == entity){ throw new IllegalArgumentException("参数不可为null!"); } try{ getSqlSession().update(entityClass.getName()+SQL_UPDATE, entity); } catch (Exception e) { logger.error("更新数据异常:", e); return false; } return true; } @Override public boolean delete(Object param) { try{ getSqlSession().delete(entityClass.getName()+SQL_DELETE, param); }catch (Exception e) { logger.error("删除数据异常:",e); return false; } return true; } }
5)、ReflectHelper类,工具类,通过java反射,获得定义类时声明的基类(父类)的泛型参数的类型.
package spring.mybatis.utils; /* * 文件名:ReflectHelper.java * * �? 能: 利用java反射机制,提供访问类的详细信息和类对象的工具方法�? * �? 名: ReflectHelper * **/ import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import org.apache.log4j.Logger; /** * * <b>本类�?利用java反射机制,提供访问类的详细信息和类对象的工具类�? * </b><br><br> * <em> * <b>功能�?/b>利用java反射机制,提供访问类的详细信息和类对象的工具方法�? * * </em> * */ public class ReflectHelper { private static final Logger log = Logger.getLogger(ReflectHelper.class); /** * 获取obj对象fieldName的Field * @param obj * @param fieldName * @return */ public static Field getFieldByFieldName(Object obj, String fieldName) { for (Class<?> superClass = obj.getClass(); superClass != Object.class; superClass = superClass .getSuperclass()) { try { return superClass.getDeclaredField(fieldName); } catch (NoSuchFieldException e) { } } return null; } /** * 获取obj对象fieldName的属性�? * @param obj * @param fieldName * @return * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ public static Object getValueByFieldName(Object obj, String fieldName) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Field field = getFieldByFieldName(obj, fieldName); Object value = null; if(field!=null){ if (field.isAccessible()) { value = field.get(obj); } else { field.setAccessible(true); value = field.get(obj); field.setAccessible(false); } } return value; } /** * 设置obj对象fieldName的属性�? * @param obj * @param fieldName * @param value * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ public static void setValueByFieldName(Object obj, String fieldName, Object value) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Field field = obj.getClass().getDeclaredField(fieldName); if (field.isAccessible()) { field.set(obj, value); } else { field.setAccessible(true); field.set(obj, value); field.setAccessible(false); } } /** * 通过java反射,获得定义类时声明的基类(父类)的泛型参数的类型. * 如类声明:public UserDao extends HibernateDao <com.mass.demo.User> ...,�? * 调用本方法语句getSuperClassGenericType(UserDao.class,0)返回User.class. * * @param clazz - 子类Class * @param index - 基类层级 * @return 基类(父类)的泛型参数的类型 */ @SuppressWarnings("unchecked") public static Class getSuperClassGenericType(final Class clazz, final int index){ Type genericType = clazz.getGenericSuperclass(); if(!(genericType instanceof ParameterizedType)){ return Object.class; } Type[] params = ((ParameterizedType) genericType).getActualTypeArguments(); if(index>=params.length || index < 0){ log.warn("Index:"+index+",size of "+clazz.getSimpleName()+"'s Parameterize Type:"+params.length); return Object.class; } if(!(params[index] instanceof Class)){ return Object.class; } return (Class)params[index]; } }
接下来通过具体的实例来分析整合过程,使用一个用户表ad_user包含字段id、username、password。
4、根据表建立实体bean和mybatis的sql.xml文件配置
User类需要继承BaseEntity
package spring.mybatis.bean; import spring.mybatis.orm.BaseEntity; /** *@author TonyJ *@time 2015-1-31 下午04:57:54 *@email tanglongjia@126.com */ public class User extends BaseEntity { /** * */ private static final long serialVersionUID = 6305819764075546164L; /** * 密码 */ private String password; public void setPassword(String password) { this.password = password; } public String getPassword() { return password; } }
user.sqlMap.xml的配置信息如下:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="spring.mybatis.bean.User"> <resultMap type="spring.mybatis.bean.User" id="userResult"> <result property="id" column="id" jdbcType="INTEGER" javaType="java.lang.Integer" /> <result property="userName" column="username" /> <result property="password" column="password" /> </resultMap> <select id="selectSingle" parameterType="int" resultMap="userResult"> select username,password,id from ad_user where id=#{id} </select> <select id="getAll" resultMap="userResult"> select username,password,id from ad_user </select> <insert id="insert" parameterType="user"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> select _nextval('ad_user_seq') </selectKey> <![CDATA[ insert into ad_user(id,username,password) values(#{id},#{userName},#{password}) ]]> </insert> <update id="update" parameterType="user"> update ad_user set username=#{userName},password=#{password} where id=#{id} </update> <delete id="delete" parameterType="int"> delete from ad_user where id=#{id} </delete> </mapper>
UserDao的实现,需要继承MyBatisDao,在UserDao中可以扩展自己的方法,@Repository注解表示该层为存储层。
package spring.mybatis.dao; import java.util.List; import org.springframework.stereotype.Repository; import spring.mybatis.bean.User; import spring.mybatis.orm.MyBatisDao; /** *@author TonyJ *@time 2015-2-2 下午08:53:40 *@email tanglongjia@126.com */ @Repository public class UserDao extends MyBatisDao<User> { public List<User> getAll(){ return this.getSqlSession().selectList("getAll"); } }
UserService类业务层类,@Service表示该层为服务层,@Transactional放在类上表示每个公有方法都受事物管理,具体的管理方式在spring的配置文件中提现。
package spring.mybatis.service; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import spring.mybatis.bean.User; import spring.mybatis.dao.UserDao; /** *@author TonyJ *@time 2015-2-2 下午08:55:04 *@email tanglongjia@126.com */ @Service @Transactional public class UserService { @Autowired private UserDao userDao; public User getUserById(Long id){ Map<String,Long> param = new HashMap<String,Long>(); param.put("id", id); return userDao.selectSingle(param); } public List<User> getAll(){ return userDao.getAll(); } }
5、配置文件的分析
最主要的配置文件是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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 数据库配置文件位置 --> <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.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 队列中的最小等待数 --> <property name="minIdle" value="${jdbc.minIdle}"></property> <!-- 队列中的最大等待数 --> <property name="maxIdle" value="${jdbc.maxIdle}"></property> <!-- 最长等待时间,单位毫秒 --> <property name="maxWait" value="${jdbc.maxWait}"></property> <!-- 最大活跃数 --> <property name="maxActive" value="${jdbc.maxActive}"></property> <property name="initialSize" value="${jdbc.initialSize}"></property> </bean> <!-- 配置SqlSessionFactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- mapper和resultmap配置路径 --> <property name="mapperLocations"> <list> <!-- 表示在spring.mybatis.bean包或以下所有目录中,以sqlMap.xml结尾所有文件 --> <value>classpath:spring/mybatis/bean/*sqlMap.xml</value> </list> </property> </bean> <!-- 配置事务的传播特性--> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="edit*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="*">readOnly</prop> </props> </property> </bean> <!-- 通过扫描的模式,扫描目录在spring/mybatis/目录下,所有的mapper都继承SqlMapper接口的接口, 这样一个bean就可以了 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="spring.mybatis"/> <property name="markerInterface" value="spring.mybatis.orm.SqlMap"/> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> <!-- 采用注释的方式配置bean --> <context:annotation-config /> <!-- 配置要扫描的包 --> <context:component-scan base-package="spring.mybatis"></context:component-scan> <!--proxy-target-class="true"强制使用cglib代理 如果为false则spring会自动选择--> <aop:aspectj-autoproxy proxy-target-class="true"/> <!-- 使用annotation注解方式配置事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
db.properties文件用于配置数据库连接信息
dialect=MYSQL jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc\:mysql\://localhost\:3306/cmsp jdbc.username=test jdbc.password=test jdbc.maxActive = 2 jdbc.maxIdle =5 jdbc.minIdle=1 jdbc.initialSize =3 jdbc.maxWait =3000
ehcache-application.xml用于配置缓存信息
<?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="java.io.tmpdir" /> <cacheManagerEventListenerFactory class="" properties=""/> <!-- DefaultCache setting. --> <defaultCache maxElementsInMemory="100000" eternal="true" overflowToDisk="true" diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" timeToIdleSeconds="130" timeToLiveSeconds="140" memoryStoreEvictionPolicy="LRU" /> </ehcache>
log4j.properties用于配置日志信息
log4j.rootLogger=debug,stdout,fout log4j.logger.org.apache.ibatis=ERROR log4j.logger.java.sql=debug,stdout log4j.logger.com.jsmass=DEBUG # SqlMap logging configuration... #log4j.logger.com.mybatis=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.org.apache.commons=ERROR #log4j.logger.java.sql.Connection=DEBUG #log4j.logger.java.sql.Statement=DEBUG #log4j.logger.java.sql.PreparedStatement=DEBUG #log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.com.ibatis=DEBUG log4j.logger.org.apache.ibais.jdbc.ScriptRunner=DEBUG #log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG #log4j.logger.com.jsmass=DEBUG #log4j.logger.cn.jsmass=DEBUG #log4j.logger.cn.com.jsmass=DEBUG # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss},%6.6r]%-5p[%t]%x(%F:%L) - %m%n #File output log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender log4j.appender.fout.file=C:/log/log4j.log log4j.appender.fout.layout=org.apache.log4j.PatternLayout log4j.appender.fout.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss},%6.6r]%-5p[%t]%x(%F\:%L) - %m%n
mybaits.sqlMap.xml无实际作用,这个里面的配置信息都在spring配置文件中进行配置了
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- dtd约束,一定要拷过去啊。下面的根据具体应用,改改就可以了 --> <configuration> <!-- 指定与数据库相关的配置资源文件名,若下面的dataSource所需要的url等直接配置编码在此文件,那么此properties也可以去掉 --> <properties resource="db.properties"/> <!-- 给指定的类定义别名,这样在后面的Mapping映射文件中,可以直接写别名,可以不用写完整限定类名了 --> <typeAliases> <typeAlias alias="user" type="spring.mybatis.bean.User" /> </typeAliases> <environments default="default"> <environment id="default"> <transactionManager type="JDBC" /> <!-- JDBC事务管理 --> <dataSource type="POOLED"> <!-- 数据源 连接池相关 所需要数据库连接的相关配置信息,在db.properties有指定 --> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- 映射文件 将sql、POJO、dao层映射连接在一起,以可配置的方式来组织。从此SQL的写法与dao层无关了。 --> <mappers> </mappers> </configuration>
6、测试的类TestMain
package spring.mybatis.test; import java.util.List; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.mybatis.bean.User; import spring.mybatis.dao.UserDao; /** *@author TonyJ *@time 2015-2-2 下午08:57:56 *@email tanglongjia@126.com */ public class TestMain { @Test public void userServiceTest(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao dao = context.getAutowireCapableBeanFactory().getBean("userDao", UserDao.class); /* Map<String, Long> param = new HashMap<String, Long>(); param.put("id", new Long(12)); User user = dao.selectSingle(param); System.out.println(user.getUserName());*/ List<User> userList = dao.getAll(); for (User user : userList) { System.out.println("id : " + user.getId() + ",userName : " + user.getUserName() + ",password : " + user.getPassword()); } } }
具体的项目代码见附件!
- smproject.part4.rar (384.8 KB)
- 下载次数: 162
- smproject.part1.rar (5 MB)
- 下载次数: 145
- smproject.part2.rar (5 MB)
- 下载次数: 127
- smproject.part3.rar (5 MB)
- 下载次数: 122
发表评论
-
项目操作日志记录(方法级别)
2019-06-12 16:45 1016在项目中要记录操作日志,可以通过spring的Aop技术去实现 ... -
spring mybatis多数据源切换(2)
2019-06-12 16:35 463在上一篇文章中写到,多数据源的切换是使用Java代码调用的,现 ... -
spring mybatis多数据源切换(1)
2019-06-05 23:00 459项目中既要连接mysql数据库又要连接sever sql数据库 ... -
Spring定时器的功能开发
2016-12-05 16:59 22051、使用quartz.jar包实现定时器功能,首先在项目中引入 ... -
Maven多模块SSM框架搭建
2016-12-05 15:07 1594整合SSM和Maven多模块,搭建一个简单的开发架构,具体的做 ... -
Hibernate缓存机制分析
2015-04-09 23:18 692复制代码 您可以通过点击 右下角 的按钮 来对文章内容作出评价 ... -
Spring管理事务的几种方式
2015-04-09 22:33 997把Hibernate用到的数据源Datasource,Hibe ... -
Hibernate注解说明
2015-04-03 18:03 844/** * * @author liuguang ... -
struts2请求过程源码分析
2015-02-04 21:08 659struts2请求过程源码分析 这篇文章写的很好 分析很透彻 ... -
spring和ibatis综合应用入门示例
2012-03-20 20:00 12901、最近几天在学习ibatis ... -
spring开发所需jar包
2012-03-14 09:17 1177spring2.5开发所需的jar包,上传到这里,方便下载使用 ... -
ibatis自动生成主键
2012-03-13 10:53 1081很多数据库支持自动生成主键的数据类型如(mysql)。不 ... -
ibatis入门教程
2012-03-12 20:41 184561、本文通过几个简单的示例,实现ibatis的增删改查的功能。 ... -
ibatis一对多示例
2012-03-12 15:20 15781、在实际开发中,iBATIS框架已经很普遍的使用,然而我们常 ... -
hibernate入门示例展示
2011-06-30 17:00 1274有很长一段时间没有使用hibernate进行开发了,最近闲来无 ...
相关推荐
总结,本篇文章介绍了如何在Idea中基于Maven创建一个整合Spring和MyBatis的项目,涵盖了配置Maven项目、添加依赖、配置Spring和MyBatis、编写Mapper接口和XML映射文件、实现服务层以及进行单元测试等步骤。...
Spring Boot旨在简化Spring框架的初始设置和配置,而MyBatis则是一个优秀的持久层框架,它提供了灵活的SQL映射机制,使得数据库操作更加便捷。下面我们将深入探讨"springboot+mybatis封装"这一主题。 首先,Spring ...
### Spring+SpringMVC+MyBatis+easyUI 整合框架详解 #### 一、Spring 注解概述 在 Spring 框架中,提供了多种注解来支持依赖注入及组件扫描等功能,使得开发人员能够更加高效地进行开发工作。 - **@Service**:此...
整合了spring 4.1.6+mybatis3.2.8的组合算是最新的稳定版本了,而且附带了一个basedao操作接口,泛型的通用写法,下载即可运行,我用的是idea项目最好用idea来开发。不会的有问题随时拍砖:308444582,我的扣扣,准您...
- **mybatis**:这可能是一个包含MyBatis映射文件的目录,每个映射文件对应一个Java接口,定义了SQL查询和结果映射。 - **泛型术语.txt**:这可能是关于Java泛型的基本概念和用法的文本文件,泛型是Java SE 5引入的...
将Spring MVC和MyBatis整合在一起,可以创建一个强大的后端系统。Spring MVC负责处理HTTP请求和路由,而MyBatis则作为数据访问层,处理数据库交互。Spring的依赖注入特性使得MyBatis的SqlSessionFactory和Mapper接口...
- **BaseDao** 是一个泛型的DAO实现,它提供基本的数据操作,如保存、删除、更新和查询等。 文档中还提到了一些XML配置文件,如**Students.cfg.xml** 和 **History.cfg.xml**,这些是Hibernate的映射文件,它们定义...
SSM 整合框架(Spring+SpringMvc+Mybatis)一、 开发指引如果你的电脑上还没有安装jdk,maven,tomcat,请先安装这些软件()如果你的电脑已经配置好了环境,那么直接将本项目pull到本地即可打开todo列表(在IDEA中,按alt+6...
Spring Boot 2.3 整合 MyBatis-Plus 高级功能 MyBatis-Plus 是一个基于 MyBatis 的增强工具,提供了许多高级功能来简化数据访问层的开发。Spring Boot 2.3 提供了完善的支持来整合 MyBatis-Plus,从而实现高效、...
通过定义泛型接口或抽象类,我们可以创建一个通用的DAO模板,将具体的数据库操作与实体类的类型绑定。例如,我们可以创建一个名为`GenericDao<T>`的接口,其中`T`代表任何Java Bean对象。这样,每次需要操作新的实体...
SSM整合框架是Java Web开发中的一个常用技术栈,由Struts 2、Spring和Mybatis三个开源框架组合而成,用于构建高效、灵活的企业级应用。在基于SSM整合框架开发的项目管理系统中,这三个框架各自承担了不同的职责,...
- **为Java 5 更新的API:** Spring Framework 3.0 对 Java 5 提供了更好的支持,包括使用泛型和枚举等功能。 - **Spring 表达式语言(SPEL):** SPEL 是一种强大的表达式语言,可以在运行时查询和操作对象图。 - *...
在IT行业中,SSH(Struts2、Spring、Hibernate)是一个经典的Java Web开发框架组合,用于构建高效、可...这种实践方式在早期的Java Web开发中十分常见,对于理解现代框架如Spring Boot和MyBatis等也有一定的启发作用。
- MyBatis-Spring整合:在Spring环境中无缝集成MyBatis,简化事务管理。 6. **Redis** - 内存数据存储:Redis作为高性能的内存数据结构服务器,用于缓存和快速数据访问。 - 数据结构:理解字符串、哈希、列表、...
SpringDataJpa通过泛型接口和注解,大大简化了数据库操作,开发者无需编写大量的DAO层代码,即可实现对数据库的CRUD操作。它支持多种ORM框架,如Hibernate和MyBatis,使得开发者可以根据项目需求灵活选择。 Mysql...
Spring的其他重要组件还包括Spring MVC,用于处理Web请求,以及与MyBatis的整合,实现持久层操作。Spring的AOP模块使得切面编程更加便捷,可以在特定的点(如方法调用前、后)插入额外的逻辑。Spring的事务管理功能...
- **泛型支持**:Spring 2.5开始支持Java泛型,增强了类型安全性和编译时检查。 - **改进的AOP**:支持更多类型的切点表达式,包括方法参数,使得切面定义更加精确。 - **更强大的数据访问支持**:提供了对JPA...
web-jsp01:mybatis通用servicev.1.0"提供了一个基础的Spring Boot Web应用,结合了MyBatis和通用Service设计,对于初学者或开发者来说,是一个很好的学习和实践案例,帮助理解如何在实际项目中整合这些技术,提升...
通过这个项目,学习者可以了解到如何整合SSM框架,搭建一个完整的电商平台,理解反射和泛型的实际应用场景,以及如何利用MVC模式进行前后端分离。此外,还可以接触到数据库设计、SQL优化、安全性考虑等多个方面的...