目录
package com.MyBatis01.dao;
import com.MyBatis01.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao
{
/**
* 查询所有操作
* @return
*/
List<User> findAll();
/**
* 保存操作
* @param user
*/
void saveUser(User user);
/**
* 更新用户
* @param user
*/
void updateUser(User user);
/**
* 删除用户
* @param userId
*/
void deleteUser(Integer userId);
User findById(int userId);
/**
* 根据名称,模糊查询
* @param username
* @return
*/
List<User> findByName(String username);
/**
* 查询总用户数目
* @return
*/
int findTotal();
}
<?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.MyBatis01.dao.IUserDao">
<!--配置查询所有 id不可随便写,要写dao的方法名称,resultType返回的类型-->
<select id="findAll" resultType="com.MyBatis01.domain.User">
select *from user;
</select>
<!--插入操作-->
<insert id="saveUser" parameterType="com.MyBatis01.domain.User">
<!-- 配置插入操作后,获取插入数据的 id -->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
</insert>
<!--更新用户-->
<update id="updateUser" parameterType="com.MyBatis01.domain.User">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
</update>
<!--删除用户-->
<delete id="deleteUser" parameterType="java.lang.Integer">
/*当参数只有一个时,可以为任何字母代表*/
delete from user where id=#{any};
</delete>
<select id="findById" parameterType="java.lang.Integer" resultType="com.MyBatis01.domain.User">
select *from user where id=#{userId};
</select>
<!--根据名称模糊查询-->
<select id="findByName" parameterType="String" resultType="com.MyBatis01.domain.User">
select *from user where username like #{name}
</select>
<!--查询总用户数目-->
<select id="findTotal" resultType="java.lang.Integer">
select count(id) from user;
</select>
</mapper>
package com.MyBatis01.test;
import com.MyBatis01.dao.IUserDao;
import com.MyBatis01.domain.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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class MyBatisTest
{
//region 初始化操作
private InputStream in=null;
private SqlSession sqlSession=null;
private IUserDao userDao;
@Before //用于在测试方法之前执行
public void init(){
try
{
// 1.读取配置文件
in=Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
sqlSession=factory.openSession();
userDao=sqlSession.getMapper(IUserDao.class);
}catch (IOException e){
e.printStackTrace();
}
}
@After //用于在测试方法之后执行
public void destroy(){
try
{
//提交事务
sqlSession.commit();
sqlSession.close();
in.close();
}catch (IOException e){
e.printStackTrace();
}
}
//endregion
/**
* 查看所有
*/
@Test
public void testSelect()
{
List<User> users=userDao.findAll();
for (User user:users){
System.out.println(user);
}
System.out.println("查询所有");
}
/**
* 插入
*/
@Test
public void testInsert(){
User user=new User();
user.setUsername("泰坦之光");
user.setAddress("泰坦星");
user.setSex('男');
user.setBirthday(new Date());
// 保存之前与保存之后 id 的不同,看 xml 配置文件
System.out.println("保存操作之前"+user);
userDao.saveUser(user);
System.out.println("保存操作之后"+user);
}
/**
* 修改
*/
@Test
public void testUpdate(){
User user=new User();
user.setId(12);
user.setUsername("信守斩龙-醉人");
user.setAddress("龙之谷");
user.setSex('男');
user.setBirthday(new Date());
userDao.updateUser(user);
}
/**
* 删除
*/
@Test
public void testDelete(){
userDao.deleteUser(111);
System.out.println("删除成功");
}
/**
* 根据 id 查询用户
*/
@Test
public void testFindById(){
User user=userDao.findById(12);
System.out.println(user);
}
/**
* 模糊查询
*/
@Test
public void testFindByName(){
// 模糊查询需要 % 所以要自己添加
List<User> users=userDao.findByName("%龙%");
for (User user:users){
System.out.println(user);
}
}
/**
* 查询总记录条数
*/
@Test
public void testFindTotal(){
Integer userTotal=userDao.findTotal();
System.out.println("总人口数目为:"+userTotal);
}
}
MyBatis 使用 ognl 表达式解析对象字段的值,#{}或者${}括号中的值为 pojo 属性名称
OGNL表达式:
Object Graphic Navigation Language
它是通过对象的取值方法来获取数据,在写法上把 get 给省略了
比如:我们获取用户的名称
? 类中写法:user.getUsername();
? OGNL表达式写法:user.username
mybatis 中为什么能直接写 username,而不用 user. 呢?
? 因为在 parameterType 中已经提供了属性所属的类,所以此时不需要写对象名
开发中通过 pojo 传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其他的查询条件(比如将用户购买商品信息也作为查询条件),这是可以使用包装对象传递输入参数。
pojo 类中包含 pojo
需求:根据用户名查询用户信息,查询条件放到 QueryVo 的 user 属性中
<!--配置 查询结果的列明和实体类的属性名的对应关系-->
<resultMap id="userMap" type="com.MyBatis01.domain.User">
<!--主键字段的对应-->
<id property="id" column="id"></id>
<!--左边位实体类的属性名,右边为数据库的列名-->
<!--非主键字段的对应-->
<result property="username" column="username"></result>
<result property="birthday" column="birthday"></result>
<result property="sex" column="sex"></result>
<result property="address" column="address"></result>
</resultMap>
<!--配置查询所有 id不可随便写,要写dao的方法名称,resultType返回的类型-->
<select id="findAll" resultMap="userMap">
select *from user;
</select>
原文:https://www.cnblogs.com/zuiren/p/11406103.html