**准备工作-->创建表
我们的目标是写一对一的增删改查,所以写两个表《一个User用户表 一个Detial详细表(就是把不常用的字段写到详细表)》
我们是用主表的userId和详细表的userId进行关联
user表
userId | userName | userPwd | rName | birthday |
int-主键-自增 | varchar(50) | varchar(50) | varchar(50) | varchar(100) |
userdetial表
detId | sex | address | userId |
int-主键-自增 | varchar(50) | varchar(100) | int |
**创建项目
1.创建动态web工程,名称自取
2.导入左图中的jar包,有需要的话在网上下载
3.创建beans.xml文件,进行配置,配置代码下面展示
4.写jdbc.properties数据库的连接
5.mybatis-config.xml是写日志的
6.创建包 dao service test(里面是junit测试) vo实体类
代码展示
jdbc.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql:///数据库的名称 user=root pwd=root
Beans.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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 扫描包 --> <context:component-scan base-package="com.bw"></context:component-scan> <!-- 引入JDBC文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 加载数据源DriverManagerDataSource --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="username" value="${user}"></property> <property name="password" value="${pwd}"></property> </bean> <!-- 配置SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <property name="typeAliasesPackage" value="com.bw.vo"></property> <property name="mapperLocations" value="com/bw/dao/*.xml"></property> </bean> <!-- 将Mapper接口生成代理注入到Spring --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.bw.dao"></property> </bean> </beans>
mybatis-config.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" > 3 <configuration> 4 <settings> 5 <setting name="logImpl" value="STDOUT_LOGGING"/> 6 </settings> 7 </configuration>
User实体类,写在vo包中
1 package com.bw.vo; 2 /** 3 * user实体类 4 * @author cg 5 * userId userName userPwd rName birthday **UserDtial类 6 * 主表 7 */ 8 public class User { 9 10 private int userId; 11 private String userName; 12 private String userPwd; 13 private String rName; 14 private String birthday; 15 16 private UserDetial userDetial; 17 18 public int getUserId() { 19 return userId; 20 } 21 22 public void setUserId(int userId) { 23 this.userId = userId; 24 } 25 26 public String getUserName() { 27 return userName; 28 } 29 30 public void setUserName(String userName) { 31 this.userName = userName; 32 } 33 34 public String getUserPwd() { 35 return userPwd; 36 } 37 38 public void setUserPwd(String userPwd) { 39 this.userPwd = userPwd; 40 } 41 42 public String getrName() { 43 return rName; 44 } 45 46 public void setrName(String rName) { 47 this.rName = rName; 48 } 49 50 public String getBirthday() { 51 return birthday; 52 } 53 54 public void setBirthday(String birthday) { 55 this.birthday = birthday; 56 } 57 58 public UserDetial getUserDetial() { 59 return userDetial; 60 } 61 62 public void setUserDetial(UserDetial userDetial) { 63 this.userDetial = userDetial; 64 } 65 66 @Override 67 public String toString() { 68 return "User [userId=" + userId + ", userName=" + userName + ", userPwd=" + userPwd + ", rName=" + rName 69 + ", birthday=" + birthday + ", userDetial=" + userDetial + "]"; 70 } 71 }
UserDetial实体类,写在vo包中
1 package com.bw.vo; 2 /** 3 * user的详细表 4 * @author cg 5 * detId详细表id sex性别 address地址 **User 6 * 从表 7 */ 8 public class UserDetial { 9 10 private int detId; 11 private String sex; 12 private String address; 13 14 private User user; 15 16 public int getDetId() { 17 return detId; 18 } 19 20 public void setDetId(int detId) { 21 this.detId = detId; 22 } 23 24 public String getSex() { 25 return sex; 26 } 27 28 public void setSex(String sex) { 29 this.sex = sex; 30 } 31 32 public String getAddress() { 33 return address; 34 } 35 36 public void setAddress(String address) { 37 this.address = address; 38 } 39 40 public User getUser() { 41 return user; 42 } 43 44 public void setUser(User user) { 45 this.user = user; 46 } 47 48 @Override 49 public String toString() { 50 return "UserDetial [detId=" + detId + ", sex=" + sex + ", address=" + address + ", user=" + user + "]"; 51 } 52 53 }
service层增删改查方法,写UserService接口
1 package com.bw.service; 2 3 import java.util.List; 4 5 import com.bw.vo.User; 6 7 /** 8 * service层接口 9 * @author cg 10 * 11 */ 12 public interface UserService { 13 14 List list(User user); 15 16 int add(User user); 17 18 int delete(int userId); 19 20 int update(User user); 21 22 }
service层方法接口的实现UserServiceImpl
1 package com.bw.service.impl; 2 3 import java.util.List; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 import com.bw.dao.UserDao; 9 import com.bw.service.UserService; 10 import com.bw.vo.User; 11 import com.bw.vo.UserDetial; 12 /** 13 * service层实现类 14 * @author cg 15 * 16 */ 17 @Service 18 public class UserServiceImpl implements UserService{ 19 20 //需要引入dao-调用dao接口中的方法 21 @Autowired 22 UserDao userDao; 23 24 @Override 25 public List list(User user) { 26 // TODO Auto-generated method stub 27 return userDao.list(user); 28 } 29 30 @Override 31 public int add(User user) { 32 // TODO Auto-generated method stub 33 //添加主表 34 int i = userDao.saveUser(user); 35 //根据主表添加的自增id添加明细表 36 if(i>0) { 37 UserDetial ud = new UserDetial(); 38 ud = user.getUserDetial(); 39 ud.setUser(user); 40 i = userDao.saveUserDetial(ud); 41 } 42 return i; 43 } 44 45 @Override 46 public int delete(int userId) { 47 // TODO Auto-generated method stub 48 //主表的删除id 49 int i = userDao.deleteUser(userId); 50 //从表的删除 外键 51 i = userDao.deleteUserDetial(userId); 52 return i; 53 } 54 55 @Override 56 public int update(User user) { 57 // TODO Auto-generated method stub 58 int i = userDao.updateUser(user); 59 UserDetial ud = new UserDetial(); 60 ud=user.getUserDetial(); 61 ud.setUser(user); 62 63 i = userDao.updateDetial(ud); 64 return i; 65 } 66 }
dao层接口
1 package com.bw.dao; 2 3 import java.util.List; 4 5 import com.bw.vo.User; 6 import com.bw.vo.UserDetial; 7 8 /** 9 * Dao层接口 10 * userDao全限定名--com.bw.dao.UserDao 11 * @author cg 12 * 13 */ 14 public interface UserDao { 15 16 List list(User user); 17 18 int saveUser(User user); 19 20 int saveUserDetial(UserDetial ud); 21 22 int deleteUser(int userId); 23 24 int deleteUserDetial(int userId); 25 26 int updateUser(User user); 27 28 int updateDetial(UserDetial ud); 29 }
UserMapper.xml是写增删改查代码的xml,一般和dao接口写在一起
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 3 <mapper namespace="com.bw.dao.UserDao"> 4 <resultMap type="com.bw.vo.User" id="myuser"> 5 <id property="userId" column="userId"/> 6 <id property="userName" column="userName"/> 7 <id property="userPwd" column="userPwd"/> 8 <id property="rName" column="rName"/> 9 <id property="birthday" column="birthday"/> 10 <collection property="userDetial" ofType="com.bw.vo.UserDetial"> 11 <id property="detId" column="detId"/> 12 <result property="sex" column="sex"/> 13 <result property="address" column="address"/> 14 </collection> 15 </resultMap> 16 17 18 <select id="list" resultMap="myuser" parameterType="com.bw.vo.User"> 19 select a.*,b.detId,b.sex,b.address from wk_user a inner join wk_userdetial b on a.userId=b.userId 20 <where> 21 <if test="userName!=null and userName!=''"> 22 and a.userName like concat('%',#{userName},'%') 23 </if> 24 <if test="userDetial.address!=null and userDetial.address!=''"> 25 and b.address like concat('%',#{userDetial.address},'%') 26 </if> 27 </where>order by a.birthday desc 28 </select> 29 <!-- 获取主表自增的id --> 30 <insert id="saveUser" parameterType="com.bw.vo.User"> 31 insert into wk_user values(null,#{userName},#{userPwd},#{rName},#{birthday}) 32 <selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Integer"> 33 select last_insert_id() as userId 34 </selectKey> 35 </insert> 36 <insert id="saveUserDetial" parameterType="com.bw.vo.UserDetial"> 37 insert into wk_userdetial values(null,#{sex},#{address},#{user.userId}) 38 </insert> 39 40 <delete id="deleteUser" parameterType="int"> 41 delete from wk_user where userId = #{userId} 42 </delete> 43 <delete id="deleteUserDetial" parameterType="int"> 44 delete from wk_userdetial where userId = #{userId} 45 </delete> 46 47 <update id="updateUser" parameterType="com.bw.vo.User"> 48 update wk_user 49 <set> 50 <if test="userName!=null">userName=#{userName},</if> 51 <if test="userPwd!=null">userPwd=#{userPwd},</if> 52 <if test="rName!=null">rName=#{rName},</if> 53 <if test="birthday!=null">birthday=#{birthday},</if> 54 </set> 55 where userId=#{userId} 56 </update> 57 <update id="updateDetial" parameterType="com.bw.vo.UserDetial"> 58 update wk_userdetial 59 <set> 60 <if test="sex!=null">sex=#{sex},</if> 61 <if test="address!=null">address=#{address},</if> 62 </set> 63 where userId=#{user.userId} 64 </update> 65 </mapper>
Test测试类
1 package com.bw.test; 2 3 4 import java.util.List; 5 6 import org.junit.Test; 7 import org.springframework.context.ApplicationContext; 8 import org.springframework.context.support.ClassPathXmlApplicationContext; 9 10 import com.bw.service.UserService; 11 import com.bw.vo.User; 12 import com.bw.vo.UserDetial; 13 14 public class MyTest { 15 User user = new User(); 16 UserDetial ud = new UserDetial(); 17 18 @Test 19 public void list() { 20 //引入配置文件 21 ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml"); 22 UserService us = (UserService) ac.getBean("userServiceImpl"); 23 user.setUserName("l"); 24 ud.setAddress("陕西"); 25 user.setUserDetial(ud); 26 List list = us.list(user); 27 for (Object object : list) { 28 System.out.println(object); 29 } 30 } 31 32 @Test 33 public void add() { 34 //引入配置文件 35 ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml"); 36 UserService us = (UserService) ac.getBean("userServiceImpl"); 37 user.setUserName("hanxin"); 38 user.setUserPwd("666"); 39 user.setrName("韩信"); 40 user.setBirthday("1965-02-29"); 41 ud.setSex("男"); 42 ud.setAddress("辽国大草原"); 43 user.setUserDetial(ud); 44 int i = us.add(user); 45 if(i>0) { 46 System.out.println("添加成功"); 47 }else { 48 System.out.println("添加失败"); 49 } 50 } 51 52 @Test 53 public void delete() { 54 //引入配置文件 55 ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml"); 56 UserService us = (UserService) ac.getBean("userServiceImpl"); 57 int userId = 6; 58 int i = us.delete(userId); 59 if(i>0) { 60 System.out.println("删除成功"); 61 }else { 62 System.out.println("删除失败"); 63 } 64 } 65 66 @Test 67 public void update() { 68 //引入配置文件 69 ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml"); 70 UserService us = (UserService) ac.getBean("userServiceImpl"); 71 user.setUserId(7); 72 user.setUserName("cl"); 73 user.setUserPwd("888"); 74 user.setrName("成龙"); 75 ud.setSex("男"); 76 ud.setAddress("北京市房山"); 77 user.setUserDetial(ud); 78 int i = us.update(user); 79 if(i>0) { 80 System.out.println("修改成功"); 81 }else { 82 System.out.println("修改失败"); 83 } 84 } 85 86 }