版权声明:原创文章,相互提高。 https://blog.csdn.net/xu1916659422/article/details/77914253
点滴记载,点滴进步,愿自己更上一层楼。
这里记录的是非代理方式的增删改查用法,代理方式会在以后再写。
废话不多说,进入主题。
项目还是在上篇 mybatis学习之路----框架搭建 的基础上进行
上篇看到查询用的是<select>标签,那么更新,插入,删除用的就是<update><insert><delete>
上代码
User.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">
<!-- namespace命名空间,有种java package的感觉,sql隔离,这个名字必须唯一
并且不能省略不写也不能为空,不过名字倒是可以随意,只要不跟另外一个文件中的名字一样即可-->
<mapper namespace="test">
<!-- 数据库跟model属性的映射map,如果你定义的model的属性跟数据库的字段名称不完全一样,
并且想让mybatis自动将查询结果封装到model中,这个是必须的,
当然如果你的model中的属性名称跟数据库字段完全一样,那么这里就不需要了。 -->
<resultMap id="userMap" type="com.soft.mybatis.model.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="create_date" property="createDate"/>
</resultMap>
<!-- 查询标签,用于放置查询语句,id属性在本映射文件中必须唯一,并且作为该条查询语句的唯一标识,也叫statementid
parameterType 输入参数类型,可以为基本类型,包装类型
resultType 返回的结果对象集,可以为基本类型,包装类型
resultMap 上面的<resultMap 的id
**** 注意下面的sql的参数的写法,在参数只有一个,
并且是基本类型的情况写 #{id} 可以随意写,写成#{kadksdjf}也没问题-->
<select id="findUserById" parameterType="int" resultMap="userMap">
select * from t_user where id=#{id}
</select>
<!-- 如果你的model中的属性跟数据库表字段对不上,就无法完全将数据库中的数据映射到你的model
这里仅作为跟上面对比用-->
<select id="findUserById2" parameterType="int" resultType="com.soft.mybatis.model.User">
select * from t_user where id=#{id}
</select>
<!-- 查询多条 不需要参数-->
<select id="findAllUser" resultMap="userMap">
select * from t_user
</select>
<!-- 新增用户 insert标签,由于传入参数为一个model,所以sql中的参数必须跟model中的属性一样。 -->
<insert id="add" parameterType="com.soft.mybatis.model.User">
INSERT into t_user (username,password,create_date) values(#{username},#{password},#{createDate})
</insert>
<!-- 更新用户,由于传入参数为一个model,所以sql中的参数必须跟model中的属性一样。 -->
<update id="update" parameterType="com.soft.mybatis.model.User">
update t_user set username=#{username},password=#{password} where id=#{id}
</update>
<!-- 更新用户,parameterType为基本类型,参数名随意。 -->
<delete id="deleteById" parameterType="int">
delete from t_user where id=#{id}
</delete>
</mapper>
user查询接口 UserDao.java
package com.soft.mybatis.dao;
import com.soft.mybatis.Util.SqlsessionUtil;
import com.soft.mybatis.model.User;
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 java.util.List;
/**
* Created by xuweiwei on 2017/9/7.
*/
public interface UserDao {
/**
* 通过id查询信息,
* 这个xml中通过resultMap接收
* @param id 表id
* @return
*/
User findUserById(int id);
/**
* 通过id查询信息,
* 这个xml中通过resultType接收
* @param id 表id
* @return
*/
User findUserById2(int id);
/**
* 查询所有用户信息
* @return
*/
List<User> findAllUser();
/**
* 新增用户信息
* @return
*/
int add(User user);
/**
* 更新用户信息
* @return
*/
int update(User user);
/**
* 删除用户信息
* @return
*/
int deleteById(int id);
}
实现类 UserDaoImpl.java
package com.soft.mybatis.dao.impl;
import com.soft.mybatis.Util.SqlsessionUtil;
import com.soft.mybatis.dao.UserDao;
import com.soft.mybatis.model.User;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/**
* Created by xuweiwei on 2017/9/7.
*/
public class UserDaoImpl implements UserDao {
public User findUserById(int id) {
User user = null;
SqlSession sqlSession = null;
try {
sqlSession = SqlsessionUtil.getSqlSession();
user = sqlSession.selectOne("test.findUserById", id);
} catch (Exception e) {
e.printStackTrace();
} finally {
SqlsessionUtil.closeSession(sqlSession);
}
return user;
}
public User findUserById2(int id) {
User user = null;
SqlSession sqlSession = null;
try {
sqlSession = SqlsessionUtil.getSqlSession();
user = sqlSession.selectOne("test.findUserById2", id);
} catch (Exception e) {
e.printStackTrace();
} finally {
SqlsessionUtil.closeSession(sqlSession);
}
return user;
}
public List<User> findAllUser() {
SqlSession sqlSession = null;
try {
sqlSession = SqlsessionUtil.getSqlSession();
return sqlSession.selectList("test.findAllUser");
} catch (Exception e) {
e.printStackTrace();
} finally {
SqlsessionUtil.closeSession(sqlSession);
}
return null;
}
public int update(User user) {
SqlSession sqlSession = null;
try {
sqlSession = SqlsessionUtil.getSqlSession();
int result = sqlSession.insert("test.update",user);
// commit
sqlSession.commit();
return result;
} catch (Exception e) {
sqlSession.rollback();
e.printStackTrace();
} finally {
SqlsessionUtil.closeSession(sqlSession);
}
return 0;
}
public int add(User user) {
SqlSession sqlSession = null;
try {
sqlSession = SqlsessionUtil.getSqlSession();
int result = sqlSession.insert("test.add",user);
// commit
sqlSession.commit();
return result;
} catch (Exception e) {
sqlSession.rollback();
e.printStackTrace();
} finally {
SqlsessionUtil.closeSession(sqlSession);
}
return 0;
}
public int deleteById(int id) {
SqlSession sqlSession = null;
try {
sqlSession = SqlsessionUtil.getSqlSession();
int result = sqlSession.delete("test.deleteById",id);
// commit
sqlSession.commit();
return result;
} catch (Exception e) {
sqlSession.rollback();
e.printStackTrace();
} finally {
SqlsessionUtil.closeSession(sqlSession);
}
return 0;
}
}
完毕,下面开始测试。
测试代码 UserDaoTest.java
package com.soft.mybatis.dao;
import com.soft.mybatis.dao.impl.UserDaoImpl;
import com.soft.mybatis.model.User;
import org.junit.Test;
import java.util.Date;
import java.util.List;
/**
* Created by xuweiwei on 2017/9/7.
*/
public class UserDaoTest {
private UserDao dao = new UserDaoImpl();
@Test
public void findUserById() throws Exception {
User user = dao.findUserById(16);
System.out.println("findUserById:" + user);
}
@Test
public void findUserById2() throws Exception {
User user = dao.findUserById2(16);
System.out.println("findUserById2:" + user);
}
@Test
public void findAllUser() throws Exception {
List<User> users = dao.findAllUser();
for(User user:users){
System.out.println("findAllUser:" + user);
}
}
@Test
public void add() throws Exception {
User user = new User();
user.setUsername("ceshi");
user.setPassword("123456");
user.setCreateDate(new Date());
int result = dao.add(user);
System.out.println("add:" + result);
}
@Test
public void update() throws Exception {
User user = new User();
user.setId(17);
user.setUsername("小黄");
user.setPassword("123456");
user.setCreateDate(new Date());
// 先查询出要删除的数据
System.out.println("更新前:" + commonFindUserById(17));
int result = dao.update(user);
System.out.println("update:" + result);
// 先查询出要删除的数据
System.out.println("更新后:" + commonFindUserById(17));
}
@Test
public void delete() throws Exception {
// 先查询出要删除的数据
System.out.println("删除前:" + commonFindUserById(18));
int result = dao.deleteById(18);
System.out.println("delete:" + result);
// 先查询出要删除的数据
System.out.println("删除后:" + commonFindUserById(18));
}
private User commonFindUserById(int id){
return dao.findUserById(id);
}
}
测试前数据库数据信息。
findAllUser 测试结果
新增测试结果:
新增数据后数据库信息,框住的为新增的内容
更新结果:
更新执行后数据库数据信息
删除后数据库不在有主键为18的数据
以上就是mybatis的基本的增删改查的用法。