Mybatis+struts2+spring整合
把student项目改造成ssm struts2 +mybatis+spring
1,先添加spring支持:类库三个,applicationContext.xml写在webinf下四个命名空间,监听器
2,添加struts2支持 struts2与spring整合的jar包
3,添加mybatis2支持,把jar包导入,mybatis与spring整合的jar包,把原来在mybatis.cfg.xml中的大部分配置都写在applicationContext.xml,跟hibernate一样,只不过像日志输出方式与分页插件还是需要写在mybatis.cfg.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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <context:component-scan base-package="cn.bdqn.student"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="oracle.jdbc.OracleDriver" p:url="jdbc:oracle:thin:@localhost:1521:ORCL" p:username="stuinfo" p:password="ok" /> <!-- 配置SQLSessionFactory "dataSource"注入数据源 typeAliasesPackage把这个实体类下的所有都自动设置别名--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:mapperLocations="classpath:cn/bdqn/student/mapper/*.xml" p:typeAliasesPackage="cn.bdqn.student.entity" p:configLocation="classpath:mybatis.cfg.xml" /> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" /> <!-- 事务增强 --> <tx:advice id="txAdvice"> <tx:attributes> <tx:method name="*"/> </tx:attributes> </tx:advice> <!-- 事务切面 --> <aop:config> <aop:pointcut expression="execution(* cn.bdqn.student.service..*.*(..))" id="txMethods"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txMethods"/> </aop:config> <!-- 配置动态创建Mapper实现类对象 --> <!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" p:mapperInterface="cn.bdqn.student.mapper.UserMapper" p:sqlSessionFactory-ref="sqlSessionFactory" /> <bean id="courseMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" p:mapperInterface="cn.bdqn.student.mapper.CourseMapper" p:sqlSessionFactory-ref="sqlSessionFactory" /> <bean id="educationMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" p:mapperInterface="cn.bdqn.student.mapper.EducationMapper" p:sqlSessionFactory-ref="sqlSessionFactory" /> <bean id="studentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" p:mapperInterface="cn.bdqn.student.mapper.StudentMapper" p:sqlSessionFactory-ref="sqlSessionFactory" /> --> <!-- 扫描指定的包,根据映射自动生成Mapper实现类对象 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="cn.bdqn.student.mapper" /> </beans>
<?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="cn.bdqn.student.mapper.StudentMapper"> <insert id="saveStudent" parameterType="Student"> INSERT INTO Student(id,name,sex,birthday,cid,eid,contact,time,state,addTime,pic) VALUES( SEQ_STUDENT.nextval, #{name}, #{sex}, #{birthday}, #{course.id}, #{education.id}, #{contact}, #{time}, #{state}, #{addtime}, #{pic} ) </insert> <select id="getStudent" resultMap="studentMap"> SELECT s.id, s.name, s.sex, s.birthday, s.cid, s.eid, s.contact, s.time, s.state, s.addTime, c.name AS cname, e.name AS ename, s.pic FROM Student s INNER JOIN Course c ON s.cid=c.id INNER JOIN Education e ON s.eid=e.id WHERE s.id=#{id} </select> <select id="findStudent" resultMap="studentMap"> SELECT s.id, s.name, s.sex, s.birthday, s.cid, s.eid, s.contact, s.time, s.state, s.addTime, c.name AS cname, e.name AS ename, s.pic FROM Student s INNER JOIN Course c ON s.cid=c.id INNER JOIN Education e ON s.eid=e.id <where> <if test="name!=null">s.name LIKE #{name}</if> <if test="courseId">AND s.cid=#{courseId}</if> <if test="time!=null">AND time=#{time}</if> <if test="educationId!=null">AND s.eid=#{educationId}</if> <if test="state!=null">AND state=#{state}</if> </where> ORDER BY s.id DESC </select> <resultMap id="studentMap" type="Student"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="sex" property="sex"/> <result column="birthday" property="birthday"/> <result column="contact" property="contact"/> <result column="time" property="time"/> <result column="state" property="state"/> <result column="addTime" property="addtime"/> <result column="birthday" property="birthday"/> <association property="course" javaType="Course"> <id column="cid" property="id"/> <result column="cname" property="name"/> </association> <association property="education" javaType="Education"> <id column="eid" property="id"/> <result column="ename" property="name"/> </association> </resultMap> <update id="updateStudent" parameterType="Studnet"> UPDATE Student SET name=#{name}, sex=#{sex}, birthday=#{birthday}, cid=#{course.id}, eid=#{education.id}, contact=#{contact}, time=#{time}, state=#{state}, pic=#{pic} WHERE id=#{id} </update> <delete id="deleteStudent"> DELETE FROM Student WHERE id=#{id} </delete> </mapper>
package cn.bdqn.student.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import cn.bdqn.mybatis.plugin.PageParam; import cn.bdqn.student.entity.Course; import cn.bdqn.student.entity.Student; public interface StudentMapper { public List<Student> findStudent( @Param("pageParam") PageParam param, @Param("name") String name, @Param("courseId") Integer courseId, @Param("time") Integer time, @Param("educationId") Integer educationId, @Param("state") Integer state ); public void saveStudent(Student student); public Student getStudent(Integer id); //更新学生 public void updateStudent(Student student); //删除学生 public void deleteStudent(Integer id); }
package cn.bdqn.student.dao.student; import java.util.List; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import cn.bdqn.mybatis.plugin.PageParam; import cn.bdqn.student.entity.Student; import cn.bdqn.student.mapper.StudentMapper; import cn.bdqn.student.util.PageBean; @Repository("studentDAO") public class StudentDAOImpl implements IStudentDAO{ private StudentMapper studentMapper; @Autowired public void setStudentMapper(StudentMapper studentMapper) { this.studentMapper = studentMapper; } @Override public void saveStudent(Student student) { studentMapper.saveStudent(student); } @Override public PageBean findStudent(int pageIndex, int pageSize, String name, Integer courseId, Integer time, Integer educationId, Integer state) { PageBean p=new PageBean(); PageParam param=new PageParam(); if(StringUtils.isEmpty(name) ){ name=null; }//由于name是“”空字符串,但我在判断的时候却是以空来进行判断的,所以需要进行处理 List<Student> results=studentMapper.findStudent(param, name, courseId, time, educationId, state); p.setPageIndex(pageIndex); p.setPageSize(pageSize); p.setPageCount(param.getPageCount()); p.setResults(results); p.setRowCount(param.getRowCount()); return p; } @Override public Student getStudent(Integer id) { // TODO Auto-generated method stub return studentMapper.getStudent(id); } @Override public void updateStudent(Student student) { // TODO Auto-generated method stub } @Override public void deleteStudent(Integer id) { // TODO Auto-generated method stub } }