20200504——mybatis crud

前言

基础的搭建环境完毕,测试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

代码链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值