Mybatis(四): 使用注解开发(使用注解对数据库增删改查)

8. 使用注解开发

早期的,mybatis都是使用xml进行配置的,直到注解的出现,注解可以替代一些xml中的配置。

连xml配置都不要了!

CRUD的注解:

  • @insert()
  • @delete()
  • @update()
  • @select()

有一个构造器,可以实现事务自动提交。

openSession(true); //openSession构造器如果参数为true,则事务会自动提交。我们就不用每次都commit;

优化项目

1. 事务优化:自动提交事务

//获得一个带事务自动提交功能的SqlSession公共的方法
public static SqlSession getSqlSession(){
    //自动提交事务
    //开启事务自动提交,openSession构造器为true,则事务会自动提交
    return sqlSessionFactory.openSession(true);
}

2. 别名优化:pojo包下类自动设置别名

<!--配置别名-->
<typeAliases>
    <!--<typeAlias type="com.westos.pojo.User" alias="User"/>-->
    <package name="com.westos.pojo"/>
</typeAliases>

mapper映射文件路径修改

<mappers>
    <!--class对应的是一个接口类-->
    <!--resource对应的是一个接口类的映射文件-->
   <mapper class="com.westos.dao.UserDao"/>
   <!--<mapper resource="com/westos/dao/UserMapper.xml"/>-->
</mappers>

使用注解进行开发

与原来的相比,使用注解代替了与接口相对应的UserMapper.xml配置文件

1. 接口:UserDao

package com.westos.dao;

import com.westos.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserDao {
    //查询全部用户
    @Select("select * from user")
    List<User> getUserAllList();

    //通过id查询用户
    @Select("select * from user where id = #{id}")
    User getUserById(int i);

    //添加用户
    @Insert("insert into user(id, name, pwd) values(#{id},#{name},#{pwd})")
    int  addUser(User user);

    //修改用户
    @Update("update user set name = #{name},pwd = #{pwd} where id = #{id}")
    int updateUser(User user);

    //删除用户
    @Delete("delete from user where id = #{id}")
    int deleteUser(@Param("id") int id);

    //@Param    多个的话就需要@Param进行标识
}

2. mybatis核心配置文件mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--配置文件-->
    <properties resource="db.properties"/>

    <!--myabris配置-->
    <!--<settings>-->
        <!--&lt;!&ndash;默认日志实现&ndash;&gt;-->
        <!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->

        <!--&lt;!&ndash;Log4j实现-->
       <!--注意大小写-->
       <!--&ndash;&gt;-->

    <!--</settings>-->

    <!---->
    <typeAliases>
        <!--配置指定类的别名-->
        <!--<typeAlias type="com.westos.pojo.User" alias="User"/>-->

        <!--
        可以为一个包的所有类指定别名,这个别名为类名
        com.kuang.pojo.User    -  >  User
        com.kuang.pojo.Student   -  >  Student

        -->
        <package name="com.westos.pojo"/>
    </typeAliases>
    <!--配置环境,这里可以有多套环境 default代表默认的那一套-->
    <environments default="development">
        <!--配置一套环境 id,环境的名字-->
        <environment id="development">
            <!--transactionManager :事务管理,type:jdbc-->
            <transactionManager type="JDBC"/>
            <!--dataSource 数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <!--xml中不允许&符号直接出现,我们需要使用&amp;   代替-->
                <property name="url" value="${url}"/>

                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--关联映射文件-->
    <mappers>
        <!--class对应的是一个接口类-->
        <!--resource对应的是一个接口类的映射文件-->
        <mapper class="com.westos.dao.UserDao"/>
        <!--<mapper resource="com/westos/dao/UserMapper.xml"/>-->
    </mappers>
</configuration>

db.properties文件

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

3. 测试类test

package com.westos.dao;


import com.westos.pojo.User;
import com.westos.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;


import java.util.List;


public class test {
    @Test
    //获取全部用户
    public void getUserAllList(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
        //getSqlSession()方法是自己设置的一个方法,在工具包中,方法MyBatisUtils

        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userAllList = mapper.getUserAllList();
        for (User user : userAllList) {
            System.out.println(user);
        }
        sqlSession.close();//关闭sqlSession
    }

    @Test
    //通过id来查询用户
    public void getUserById(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        User user = mapper.getUserById(2);

        System.out.println(user);

        sqlSession.close();//关闭sqlSession

    }

    @Test
    //添加用户
    public void addUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        User user = new User(6, "小江", "123444");
        int i = mapper.addUser(user);
        if(i>0){
            System.out.println("添加成功");
        }
      sqlSession.close();//关闭sqlSession

    }

    @Test
    //修改用户
    public void updateUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        User user = new User(3,"李四","123456");

        int i = mapper.updateUser(user);
        System.out.println(i>0?"修改成功":"修改失败");
        sqlSession.close();//关闭sqlSession
    }

    @Test
    //根据id删除用户
    public void deleteUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int i = mapper.deleteUser(6);
        if(i>0){
            System.out.println("删除成功");
        }
        sqlSession.close();//关闭SqlSession


    }
}

4. 测试结果:

  1. 获取全部用户getUserAllList测试结果
    在这里插入图片描述

  2. 通过id来查询用户getUserByIdt测试结果
    在这里插入图片描述

3.添加用户 addUsert测试结果
在这里插入图片描述
4.更新用户 updateUsert测试结果
在这里插入图片描述
在这里插入图片描述

  1. 根据id删除用户deleteUsert测试结果
    在这里插入图片描述
    在这里插入图片描述

注意事项

  1. 开启事务自动提交了
  2. @param参数尽量都写上,如果有多个参数,就必须填写。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值