mybatis入门之CURD

本文介绍如何使用 MyBatis 框架实现数据库的基本增删改查(CURD)操作,包括 Maven 依赖配置、数据库表创建、实体类定义、XML 映射文件编写及 Java 测试代码实现。

mybatis入门之CURD

1. maven 依赖
<properties>
        <mybatis.version>3.3.0</mybatis.version>
        <junit.version>4.0</junit.version>
        <mysql.version>5.1.40</mysql.version>
</properties>
<dependencies>
 <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
</dependencies>
2. 构建测试的数据库
create table student(
    sid int(4) primary key auto_increment,
    sname char(50),
    age int(3),
    gno int(4)
);
3. 创建jdbc.properties , 把数据库配置信息外置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/你的数据库名
username=你的数据库用户名
password=你的密码
4. 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>

    <!-- 引入外部jdbc.properties 文件-->
    <properties resource="jdbc.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
    <mappers>
        <!-- 映射方式1: xml 文件 -->
        <mapper resource="com/zhy/Student.xml"/>
        <!-- 映射方式2:接口-->
        <mapper class="com.zhy.user.dao.StudentMapper"></mapper>
    </mappers>
</configuration>
5. bean实体类
package com.zhy.user.bean;

/**
 * Created by Administrator on 2017/7/20 0020.
 */
public class Student {

    private int sid;
    private String sname;
    private int age;
    private int gno;

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGno() {
        return gno;
    }

    public void setGno(int gno) {
        this.gno = gno;
    }

    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", age=" + age +
                ", gno=" + gno +
                '}';
    }
}
6. SqlSeesionFactory对象获取。MybatisUtils.java
package com.zhy.test;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

/**
 * Created by Administrator on 2017/7/22 0022.
 *
 * Mybatis工具类
 */
public class MybatisUtils {

    public static SqlSessionFactory getSqlSessionFactory(){
        String resource = "config.xml";
        InputStream inputStream = null;
        try{
            inputStream = Resources.getResourceAsStream(resource);
        }catch (Exception e){
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;
    }
}
7. xml 映射,映射文件:Student.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhy.user.bean.Student">

    <!--查询-->
    <select id="selectStudent" parameterType="int" resultType="com.zhy.user.bean.Student">
        select * from student s where s.sid=#{sid}
    </select>

    <!--添加-->
    <insert id="insertStudent" parameterType="com.zhy.user.bean.Student">
      insert into student(sname,age,gno) values (#{sname},#{age},#{gno})
    </insert>

    <!--删除-->
    <delete id="deleteStudent" parameterType="int">
        delete from student where sid=#{sid}
    </delete>

    <!--更新-->
    <update id="updateStudent" parameterType="com.zhy.user.bean.Student">
        update student set sname=#{sname} where sid=#{sid}
    </update>
</mapper>
8. 通过xml配置对数据库操作, TestMybatisByXml.java
package com.zhy.test;

import com.zhy.user.bean.Student;
import com.zhy.user.dao.StudentMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

/**
 * Created by Administrator on 2017/7/22 0022.
 *
 * 通过xml配置
 */
public class TestMyBatisByXml {

    @Test
    public void selectTest(){
        SqlSession session = null;
        try{
            session = MybatisUtils.getSqlSessionFactory().openSession();
            Student student = session.selectOne("com.zhy.user.bean.Student.selectStudent",2);
            System.out.println(student);
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            session.close();
        }
    }

    @Test
    public void insertTest(){
        SqlSession session = null;
        try{
            session = MybatisUtils.getSqlSessionFactory().openSession();
            Student student = new Student();
            student.setSname("Mr.Mybatis");
            student.setAge(12);
            student.setGno(1);
            //返回影响行数
            int resultNum = session.insert("com.zhy.user.bean.Student.insertStudent",student);
            System.out.println(resultNum);
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            session.close();
        }
    }

    @Test
    public void deleteTest(){
        SqlSession session = null;
        try {
            session = MybatisUtils.getSqlSessionFactory().openSession(true);
            //返回影响行数
            int num = session.delete("com.zhy.user.bean.Student.deleteStudent",17);
            System.out.println(num);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.close();
        }
    }

    @Test
    public void updateStudent(){
        SqlSession session = null;
        try {
            session = MybatisUtils.getSqlSessionFactory().openSession(true);
            Student student = new Student();
            student.setSname("zh1");
            student.setSid(2);
            //返回影响行数
            int num = session.update("com.zhy.user.bean.Student.updateStudent", student);
            System.out.println(num);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.close();
        }
    }
}
9. 通过接口配置,StudentMapper.java
package com.zhy.user.dao;

import com.zhy.user.bean.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

/**
 * Created by Administrator on 2017/7/21 0021.
 */
public interface StudentMapper {

    @Select("select * from student where sid=#{sid}")
    public Student selectStudent(int sid);

    @Insert("insert into student(sname,age, gno) values(#{sname},${age},#{gno})")
    public int insertStudent(Student student);

    @Delete("delete from student where sid=#{sid}")
    public int deleteStudent(int sid);

    @Update("update student set sname=#{sname} where sid=#{sid}")
    public int updateStudent(Student student);
}
10. 通过接口配置对数据库的操作, TestMybatisByInterface.java
package com.zhy.test;

import com.zhy.user.bean.Student;
import com.zhy.user.dao.StudentMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.zhy.test.MybatisUtils;

/**
 * Created by Administrator on 2017/7/20 0020.
 *
 * 通过interface配置
 *
 */
public class TestMybatisByInterface {
    @Test
    public void selectTest(){
        SqlSession session = null;
        try{
            session = MybatisUtils.getSqlSessionFactory().openSession(true);
            StudentMapper studentMapper = session.getMapper(StudentMapper.class);
            Student student = studentMapper.selectStudent(2);
            System.out.println(student);
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
           session.close();
        }
    }

    @Test
    public void insertTest(){
        SqlSession session = null;
        session = MybatisUtils.getSqlSessionFactory().openSession();
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        Student student = new Student();
        student.setSname("zh332hyahaha");
        student.setGno(1);
        student.setAge(18);
        try {
            int num = studentMapper.insertStudent(student);
            System.out.println(num);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.commit();
            session.close();
        }
    }

    @Test
    public void deleteTest(){
        SqlSession session = null;
        try {
            session = MybatisUtils.getSqlSessionFactory().openSession();
            StudentMapper studentMapper = session.getMapper(StudentMapper.class);
            int num = studentMapper.deleteStudent(18);
            System.out.println(num);
            session.commit();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.close();
        }
    }

    @Test
    public void updateStudent(){
        SqlSession session = null;
        try {
            session = MybatisUtils.getSqlSessionFactory().openSession();
            StudentMapper studentMapper = session.getMapper(StudentMapper.class);
            Student student = new Student();
            student.setSname("zh");
            student.setSid(2);
            int num = studentMapper.updateStudent(student);
            session.commit();
            System.out.println(num);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            session.close();
        }
    }
}
注意:
    SqlSesisonFactory.openSession()方法默认是不主动提交事务的。事务通过主动和手动两种方式提交。
    A. 主动:SqlSessionFactory.openSession(true)返回SqlSession对象,这样是会主动提交事务。
    B. 手动:SqlSessionFactory.openSession()返回SqlSession对象,这是手动提交事务,在做数
    据库操作后,记得用SqlSession对象的commit()方法手动提交事务,否则会出现sql语句执行成功了,但是
    数据库数据没有发生改变的情况。更多SqlSession的介绍请参考官网。

Mybatis的简单CURD操作,更多介绍请参考Mybatis官网:
http://www.mybatis.org/mybatis-3/zh/index.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值