四部曲:
1.写接口 + 2.写映射sql + 3.把mapper注册到mybatis的配置文件 + 4.写单元测试和运行
我们都知道,在 UserMapper.java 文件里面可以写了接口,国际惯例的在映射文件里面的parameterType参数注明传参的类型,在sql中使用#{参数}得到参数,这一系列步骤确实规范,但有时会让我们疲于设置,Mybatis提供了一个更快的注释机制---@Param 注解用法。
(1)新建一个UserMapper.java文件,并且编写接口方法:
package com.smbms.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.smbms.entities.User;
public interface UserMapper {
public int updatePwd(@Param("id") Integer id,@Param("userPassword") String userPassword);
}
(2)新建UserMapper.xml文件,写sql 语句:
<?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="com.smbms.dao.UserMapper">
<update id="updateUser" parameterType="com.smbms.entities.User">
update smbms_user set userCode = #{userCode},userName=#{userName},userPassword=#{userPassword},gender=#{gender},birthday=#{birthday},
phone=#{phone},address=#{address},userRole=#{userRole},modifyBy=#{modifyBy},modifyDate=#{modifyDate}
where id=#{id}
</update>
</mapper>
(3)新建一个Mybatis全局配置文件mybatis-config.xml,并注册 UserMapper.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>
<properties resource="datasources.properties"/>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.usename}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/smbms/dao/UserMapper.xml"/>
<mapper resource="com/smbms/dao/ProviderMapper.xml"/>
</mappers>
</configuration>
(4)新建一个单元测试文件 UserTest.java:
package com.smbms.entities;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.smbms.dao.ProviderMapper;
import com.smbms.dao.UserMapper;
public class UserTest {
public SqlSession getSqlSession() throws IOException{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = build.openSession();
return openSession;
}
}
//updateUser
// @Test
public void test08() throws IOException{
System.out.println("===============test add!");
List<User> userlist = new ArrayList<User> ();
int count = 0;
SqlSession sqlSession = getSqlSession();
User user = new User();
try{
System.out.println(110);
user.setId(1);
user.setAddress("maoming");
Date birthday = new SimpleDateFormat("YYYY-MM-dd").parse("1992-1-1");
user.setBirthday(birthday);
user.setPhone("000000");
user.setUserCode("test01");
user.setUserName("mmb");
user.setUserPassword("scua-electical");
user.setGender(2);
user.setUserRole(110);
user.setCreatedBy(1);
user.setCreationDate(new Date());
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
System.out.println(111);
mapper.updateUser(user);
System.out.println(112);
sqlSession.commit();
userlist = mapper.Usershow();
for(User user1 : userlist){
System.out.println("***: "+user1);
}
//模拟异常
// int i = 2/0;
}catch(Exception e){
System.out.println(222);
e.printStackTrace();
sqlSession.rollback();
count=0;
}finally{
sqlSession.close();
}
}
综上,完成一个Update的Demo。
知识点:
(1)date数据模型的设定,在java代码里要导入Util库,赋初值的方式是:
Date birthday = new SimpleDateFormat("YYYY-MM-dd").parse("1992-1-1");
(2)事务回滚,当有异常发生(传参有误等)的情况,修改不能超过上传,便需要将状态回滚到原来的情况。