栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis:注解增删改查(狂神)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis:注解增删改查(狂神)

 

 

 

 

 

但是MyBatis大多不使用注解,而使用配置文件,因为注解不能处理复杂的语句,不能使用resultMap处理表的列名和实体类属性名不一致问题,注解只适合处理简单的语句

 mybatis-config.xml:使用注解需要绑定接口







    
        
        
        
    



    
        
        
        

    


    

    
        
    

    
        
            
            
            
                
                
                
                
            
        
    


   



    
        
    

db.properties:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=&useUnicode=true&characterEncoding=utf-8
username=root
password=123456

MybatisUtils:

package com.kuang.utils;

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.io.IOException;
import java.io.InputStream;

//sqlSessionFactory --sqlSession
public class MybaitsUtils {
    private static SqlSessionFactory sqlSessionFactory;//提升作用域
    
    static{
        try {
            //使用MyBaits获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
    public static SqlSession getSqlSession(){
        //获取SqlSession对象
         SqlSession sqlSession=sqlSessionFactory.openSession(true);//true设置事务自动提交,执行增删改,sql不用手动提交
         return sqlSession;
    }
}

User11:使用注解的实体类的属性名话尽量和表的列名一样,否则查询的时候为空

package com.kuang.pojo;

import org.apache.ibatis.type.Alias;

//实体类
@Alias("user") //注解自定义别名的名字
public class User11 {
    private int id;
    private String name;
    private String password;

    public User11() {
    }

    public User11(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User11{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", password='" + password + ''' +
                '}';
    }
}

 

Userdao:

package com.kuang.dao;

import com.kuang.pojo.User11;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

public interface UserDao {

    @Select("select * from user11")  //通过注解就不用写UserMapper.xml配置文件了,还需要在主配置文件上绑定接口
    List getUsers();

    //方法存在多个参数,所有的参数前面必须加上@Param("id")注解 id=#{id} id对应@Param("id")里的id
    @Select("select *from user11 where id=#{id}")
    User11 getUserByID(@Param("id") int id);

    @Insert("insert into user11(id,name,pwd) values(#{id},#{name},#{password})")
    int addUser(User11 user11);

    @Update("update user11 set name=#{name},pwd=#{password} where id=#{id}")
    int updateUser(User11 user11);

    //这里使用了@Param注解里面写的uid sql获取就要用uid
    @Delete("delete from user11 where id=#{uid}")
    int deleteUser(@Param("uid") int id);
}

UserMappperTest:

import com.kuang.dao.UserDao;
import com.kuang.pojo.User11;
import com.kuang.utils.MybaitsUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {
    //查询所有
    @Test
    public void test1(){
        SqlSession sqlSession= MybaitsUtils.getSqlSession();
        //底层主要应用反射
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        List users=mapper.getUsers();
        for (User11 user : users) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    //根据id查询
    @Test
    public void test2(){
        SqlSession sqlSession= MybaitsUtils.getSqlSession();
        //底层主要应用反射
        UserDao mapper = sqlSession.getMapper(UserDao.class);

       User11 user11=mapper.getUserByID(1);
        System.out.println(user11);

        sqlSession.close();
    }
    //添加一条数据
    @Test
    public void test3(){
        SqlSession sqlSession= MybaitsUtils.getSqlSession();
        //底层主要应用反射
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        int res=mapper.addUser(new User11(8,"xiaohong","1232"));
        if (res>0){
            System.out.println("插入成功");
        }
        //因为设置了自动提交事务,这里增删改操作不用提交事务
        sqlSession.close();
    }
    //修改数据
    @Test
    public void test4(){
        SqlSession sqlSession= MybaitsUtils.getSqlSession();
        //底层主要应用反射
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        int res=mapper.updateUser(new User11(8,"TOto","12322"));
        if (res>0){
            System.out.println("更新成功");
        }
        //因为设置了自动提交事务,这里增删改操作不用提交事务
        sqlSession.close();
    }

    //删除数据
    @Test
    public void test5(){
        SqlSession sqlSession= MybaitsUtils.getSqlSession();
        //底层主要应用反射
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        int res=mapper.deleteUser(8);
        if (res>0){
            System.out.println("删除成功");
        }
        //因为设置了自动提交事务,这里增删改操作不用提交事务
        sqlSession.close();
    }
}

1.实体类的的属性名password和表的列不一样,不能再配置文件中使用resultMap结果集映射,导致查询的password为空

2.

 

 

3.

 

 4.

 

5.

 

 

 

#{ }和${ }区别?

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/962477.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号