Mybatis增删改查

主要写用法

引入依赖

   <!--mybatis和MySQL依赖/坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>

编写配置文件SqlMapConfig.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>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置MySQL环境-->
        <environment id="mysql">
            <!--配置事务类型-->
            <transactionManager type="JDBC"/>
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
                <!--配置数据源的四个基本信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/myjdbc?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

    </environments>
    <!--指定映射配置文件位置 每个dao有一个独立配置文件-->
    <mappers>
        <mapper resource="com/company/dao/IUserDao.xml"></mapper>
    </mappers>
</configuration>

对上面的进行改造

  • properties标签
<properties>
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/myjdbc?serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </properties>
 <environments default="mysql">
        <!--配置MySQL环境-->
        <environment id="mysql">
            ...
            <dataSource type="POOLED">
                <!--配置数据源的四个基本信息-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

用${}的方式加上properties中的name标签,可以代替之前,这样的话就可以将properties单独写一个文件便于管理:
jdbcConfig.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myjdbc?serverTimezone=UTC
username=root
password=root

然后在SqlMapConfig.xml配置:

<properties resource="jdbcConfig.properties"/>

映射配置文件IUserDao.xml配置:

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.company.dao.IUserDao">
    <!--配置查询所有方法-->
    <select id="findAll" resultType="com.company.domain.User">
select * from user</select>
    <!--配置插入方法-->
    <insert id="insert" parameterType="com.company.domain.User">
        insert into user(name,studentID,type,date) values(#{name},#{studentID},#{type},#{date})
    </insert>
     <!--配置更新方法-->
    <update id="updateUser" parameterType="com.company.domain.User">
        update user set name=#{name},studentID=#{studentID},type=#{type},date=#{date} where name=#{name}
    </update>
    <!--配置删除方法-->
    <delete id="delete" parameterType="String">
        delete from user where name=#{name}
    </delete>
    <select id="count" resultType="int">
        select count(id) from user
    </select>
</mapper>

namespace=“com.company.dao.IUserDao” 表示接口全类名
id=“findAll” 方法名为findAll resultType=“com.company.domain.User” 返回值封装类型为User类对象 parameterType=“String” 表示参数类型为String

package com.company.dao;

import com.company.domain.User;

import java.util.List;

public interface IUserDao {
    /**
     * 查询所有操作
     * @return
     */
    List<User> findAll();

    /**
     * 插入一条学生信息
     * @param user
     */
    void insert(User user);

    /**
     * 更新
     * @param user
     */
    void updateUser(User user);

    /**
     * 根据姓名查找信息
     * @param name
     * @return
     */
    List<User> find(String name);

    /**
     * 删除
     * @param name
     */

    void delete(String name);

    /**
     * 查找表行数
     * @return
     */
    int count();
}

  • 配置文件要和类有相同的目录结构,就可以不写接口实现类,这里因为idea版本问题他把com/company/dao显示成了com.company.dao,不再是展开的目录

在这里插入图片描述

注解配置:
@select(“select * from user”)

 /**
     * 查询所有操作
     * @return
     */
    @Select("select * from user")
    List<User> findAll();

同时在配置文件中

<mappers>
        <mapper class="com.company.domain.User"></mapper>
</mappers>

测试方法:

//1.读取配置文件
//2.创建SQLSessionFactory工厂
//3.使用工厂创建sqlSession对象
//4.使用sqlSession创建dao代理对象
//5.使用代理对象执行方法
//6.释放资源

package com.company;

import com.company.dao.IUserDao;
import com.company.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.InputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class CRUDTest {
    private InputStream in;
    private SqlSessionFactory sessionFactory;
    private SqlSession sqlSession;
    private IUserDao iUserDao;

    /**
     * 初始化方法
     * @throws Exception
     */
    @Before
    public void init() throws Exception{
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig");
        //2.创建SQLSessionFactory工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工厂创建sqlSession对象
        sqlSession = sessionFactory.openSession();
        //4.使用sqlSession创建dao代理对象
        iUserDao = sqlSession.getMapper(IUserDao.class);
    }

    /**
     * 结束方法
     * @throws Exception
     */
    @After
    public void destroy() throws Exception{
        sqlSession.close();
        in.close();
    }

    /**
     * 查找全部
     */
    @Test
    public void findAll(){
        List<User> l = iUserDao.findAll();
        for(User u:l){
            System.out.println(u);
        }
    }
    /**
     * 插入一条数据
     */
    @Test
    public void testInsert(){
        User u = new User();
        u.setName("王五");
        u.setStudentID("220000234");
        u.setType("java");
        u.setDate(new Date());
        iUserDao.insert(u);
        //事务提交
        //不提交mybatis将会回滚
        sqlSession.commit();
    }

    /**
     * 更新操作
     */
    @Test
    public void testUpdate(){
        User u = new User();
        u.setName("李四");
        u.setStudentID("11111111");
        u.setType("java");
        u.setDate(Calendar.getInstance().getTime());
        iUserDao.updateUser(u);
        //事务提交
        //不提交mybatis将会回滚
        sqlSession.commit();
    }
    @Test
    public void testDelete(){
        String name="张三";
        iUserDao.delete(name);
        //事务提交
        //不提交mybatis将会回滚
        sqlSession.commit();
    }
    @Test
    public void testCount(){

        int n = iUserDao.count();
        System.out.println(n);
    }
}

实体类 与数据库字段保持一致在这里插入图片描述

import java.io.Serializable;

import java.util.Date;

public class User implements Serializable {
    Integer id;
    String name;
    String studentID;
    String type;
    Date date;

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

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

    public void setStudentID(String studentID) {
        this.studentID = studentID;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", studentID='" + studentID + '\'' +
                ", type='" + type + '\'' +
                ", date=" + date +
                '}';
    }
}

  • 别名
    使用typeAliases标签
    使用type引用全类名,alias写它的别名,然后别名就可以代替原来,而且不区分大小写
<typeAliases>
       <typeAlias type="com.company.domain.User" alias="User"></typeAlias>
</typeAliases>

用法:
在配置dao接口对应的配置文件 IUser.xml时resultType,parameterType,等标签就可以代替
还可以使用package标签,那么name标签下的包名下的全部设置别名,而且别名等于类名,不区分大小写。下面同样可以使用。

 <typeAliases>
<!--       <typeAlias type="com.company.domain.User" alias="User"></typeAlias>-->
       <package name="com.company.domain"/>
   </typeAliases>

为了一个小项目练习,就先学这么多,其他有空再看吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值