1、导包
Spring Spring MVC mybatis
包:spring springMVCshuju
2、配置文件
Spring 核心配置文件
Spring配置文件
mybatis配置文件
映射文件
db.properties
log4j.properties
ModelAndView:自动跳转页面
3、框架架构
UserController.java
package cn.hd.controller; import cn.hd.entity.User; import cn.hd.service.UserService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; @Controller public class UserController { @Resource(name = "userServiceImpl") private UserService userService; @RequestMapping("/login.action") public ModelAndView login(){ User userById = userService.getUserById(1); System.out.println(userById); ModelAndView mav = new ModelAndView(); mav.setViewName("/index.jsp"); return mav; } @RequestMapping("/add") public void add(){ User user = new User(); //user.setId(7); user.setName("张三"); user.setAddress("河南"); user.setBalance(20000); user.setSex("男"); Integer row = userService.addUser(user); System.out.println(row); } @RequestMapping("/updateUser") public void updateUser(){ User user = new User(); user.setId(7); user.setName("李四"); user.setAddress("河南"); user.setBalance(20000); user.setSex("男"); Integer row = userService.updateUser(user); System.out.println(row); } }
User.java——》entity
package cn.hd.controller; import cn.hd.entity.User; import cn.hd.service.UserService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; @Controller public class UserController { @Resource(name = "userServiceImpl") private UserService userService; @RequestMapping("/login.action") public ModelAndView login(){ User userById = userService.getUserById(1); System.out.println(userById); ModelAndView mav = new ModelAndView(); mav.setViewName("/index.jsp"); return mav; } @RequestMapping("/add") public void add(){ User user = new User(); //user.setId(7); user.setName("张三"); user.setAddress("河南"); user.setBalance(20000); user.setSex("男"); Integer row = userService.addUser(user); System.out.println(row); } @RequestMapping("/updateUser") public void updateUser(){ User user = new User(); user.setId(7); user.setName("李四"); user.setAddress("河南"); user.setBalance(20000); user.setSex("男"); Integer row = userService.updateUser(user); System.out.println(row); } }
UserMapper
package cn.hd.mapper; import cn.hd.entity.User; import cn.hd.query_vo.QueryVo; import org.springframework.stereotype.Repository; @Repository public interface UserMapper { User findUserById(Integer id); Integer addUser(QueryVo vo); Integer updateUser(QueryVo vo); }
UserMapper.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="cn.hd.mapper.UserMapper"> <select id="findUserById" parameterType="int" resultType="user"> SELECT * FROM t_user WHERE id = #{id} </select> <insert id="addUser" parameterType="queryVo"> INSERT INTO t_user(name,sex,address,balance) VALUES (#{user.name},#{user.sex},#{user.address},#{user.balance}) </insert> <update id="updateUser" parameterType="queryVo"> UPDATE t_user <set> <if test="user.name !=null and user.name != ''"> name = #{user.name}, </if> <if test="user.balance !=null and user.balance != ''"> balance=#{user.balance}, </if> <if test="user.sex !=null and user.sex != ''"> sex=#{user.sex}, </if> <if test="user.address !=null and user.address != ''"> address=#{user.address} , </if> </set> <where> id = #{user.id} </where> </update> </mapper>
QueryVo
package cn.hd.query_vo; import cn.hd.entity.User; import java.util.List; public class QueryVo { private User user; private List<User> list; public List<User> getList() { return list; } public void setList(List<User> list) { this.list = list; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "QueryVo{" + "user=" + user + ", list=" + list + '}'; } }
UserService
package cn.hd.service; import cn.hd.entity.User; public interface UserService { User getUserById(Integer id); Integer addUser(User user); Integer updateUser(User user); }
UserServiceImpl
package cn.hd.service.impl; import cn.hd.entity.User; import cn.hd.mapper.UserMapper; import cn.hd.query_vo.QueryVo; import cn.hd.service.UserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class UserServiceImpl implements UserService { @Resource(name = "userMapper") private UserMapper userMapper; @Override public User getUserById(Integer id) { User user = userMapper.findUserById(id); return user; } @Override public Integer addUser(User user) { QueryVo v = new QueryVo(); v.setUser(user); Integer row = userMapper.addUser(v); return row; } @Override public Integer updateUser(User user) { QueryVo v = new QueryVo(); v.setUser(user); user.setBalance(10000); Integer row = userMapper.updateUser(v); // int i = 1/0; // user.setBalance(1000); // v.setUser(user); // userMapper.updateUser(v); return row; } }
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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--读取db.properties--> <context:property-placeholder location="classpath:db.properties"></context:property-placeholder> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <bean name="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!--读取sqlMapperConfig.xml--> <property name="configLocation" value="classpath:sqlMapConfig.xml"></property> </bean> <!--自动扫描包下面的所有Mapper,当出现多个Mapper时,不用多次书写bean--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cn.hd.mapper"></property> </bean> <!--开启注解--> <context:component-scan base-package="cn.hd"></context:component-scan> <!--配置事务--> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置事务通知--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" read-only="false" propagation="REQUIRED" isolation="DEFAULT"/> <tx:method name="persist*" read-only="false" propagation="REQUIRED" isolation="DEFAULT"/> <tx:method name="delete*" read-only="false" propagation="REQUIRED" isolation="DEFAULT"/> <tx:method name="remove*" read-only="false" propagation="REQUIRED" isolation="DEFAULT"/> <tx:method name="update*" read-only="false" propagation="REQUIRED" isolation="DEFAULT"/> <tx:method name="modify*" read-only="false" propagation="REQUIRED" isolation="DEFAULT"/> <tx:method name="get*" read-only="true" propagation="REQUIRED" isolation="DEFAULT"/> <tx:method name="find*" read-only="true" propagation="REQUIRED" isolation="DEFAULT"/> </tx:attributes> </tx:advice> <!--将事务织入到目标对象--> <aop:config> <aop:pointcut id="txPc" expression="execution(* cn.hd.service.impl.*ServiceImpl.*(..))"></aop:pointcut> <aop:advisor pointcut-ref="txPc" advice-ref="txAdvice"></aop:advisor> </aop:config> </beans>
db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localhost:3306/mybatis_demo?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=123
log4j.properties
# Global logging configuration #在开发环境下日志级别设置为debug,生产环境下设置成info或error #log4j.rootLogger=DEBUG, stdout # Console output... #log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=INFO log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c,%L] - %m%n
SpringMVC.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" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--开启注解模式--> <context:component-scan base-package="cn.hd.controller"></context:component-scan> <!--配置数据转换器--> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven> </beans>
SqlMapConfig.xml
<?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"> <configuration> <!--起别名,扫描包--> <typeAliases> <package name="cn.hd.entity"></package> <package name="cn.hd.query_vo"></package> </typeAliases> <mappers> <package name="cn.hd.mapper"></package> </mappers> </configuration>