前言
基础的搭建环境完毕,测试findAll方法即可。
插入
完成插入操作
void saveUser(User user);
userdao.xml
<insert id="saveUser" parameterType="com.mmz.pojo.User">
insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday})
</insert>
package com.mmz.test;
import com.mmz.dao.UserDao;
import com.mmz.pojo.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;
/**
* @Classname MybatisTest
* @Description TODO
* @Date 2020/5/4 21:35
* @Created by mmz
*/
public class MybatisTest {
private SqlSession sqlSession;
private InputStream inputStream;
private UserDao userDao;
@Before
public void init() throws Exception{
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
sqlSession = sqlSessionFactory.openSession();
userDao = sqlSession.getMapper(UserDao.class);
}
@After
public void end() throws Exception{
sqlSession.close();
inputStream.close();
}
@Test
public void testFindAll() {
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
}
@Test
public void testSaveUser() throws IOException {
User user = new User();
user.setUsername("aowuaowuao");
userDao.saveUser(user);
}
}
当然我做到这的时候发现确实没有问题,程序运行。
事务的提交
但是仔细查看,没有开启提交事务,导致回滚了。
所以要在代码的后面加上提交事务。
@Test
public void testSaveUser() throws IOException {
User user = new User();
user.setUsername("aowuaowuao");
userDao.saveUser(user);
sqlSession.commit();
}
完成了
其他的功能模块也完成了,没有什么难度。
查询
根据id查询单个User
模糊查询
1)在Tesr方法中用%
@Test
public void testFindByName() throws Exception{
List<User> users = userDao.findByName("%二%");
for(User user : users){
System.out.println(user);
}
}
UserDao.xml中的配置
resultType 用于指定结果集
parameterType 用于指定传入参数
#{} 代表占位符,相当于原来的jdbc部门所学的 ? ,都是用于执行语句替换实际的数据
OGNL表达式
它是apache提供的一个表达式语言
Object Graphic Navigation Language 对象图导航图语言
它是按照一定的语法格式来获取数据
语法格式就是#{对象.对象}方式
#{user.username}会先找到user对象,然后在user对象中找到username属性,并调用getUsername()方法把值取出来,但是我们在parameterType属性上指定了实体类名称,所以可以省略user
mybatis中的$与#
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{} 可以有效防止sql注入,#{}可以接受简单类型值或者pojo属性值,如果parameterType传输单个简单类型值,#{}口号可以是value或者其他名称
${}
拼接字符串,通过${}
可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接受简单类型值或者pojo属性值,如果paramterType传输单个简单类型值, ${}只能是value
指定了key的值只能是value