MyBatis

Mybatis: 在JDBC的基础上进行完美的封装,保留了JDBC动态sql的编写,优化了参数的绑定和返回指的封装

sqlMapperConfig.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="development">

        <environment id="development">
            <!--事务管理  : 默认 取消了单条事物提交-->
            <transactionManager type="JDBC"/>
            <!--数据源配置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db_gm?useSSL=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--
        单独采用 mapper文件实现数据库操作
       <mapper resource="com/zhongruan/mapper/*.xml"/>-->

        <!--需要根据引用接口的形式进行调用-->
        <mapper class="com.zhongruan.dao.StudentDao"/>
        <mapper class="com.zhongruan.dao.UserDao"/>
    </mappers>
</configuration>

实体类

package com.zhongruan.bean;

public class Student {
    private int id;
//    mapper 文件中的{}里与这里一样
    private String name;
    private String sex;
    private String age;

    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 getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

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

    public Student() {
    }

    public Student(int id, String name, String sex, String age) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

mapper文件的增删改查

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--当不连接dao层时,命名空间是本身-->
<mapper namespace="StudentMapper" >
   <!-- 测试student增加
           动态sql: id值是sql引用名
           参数的绑定  1、需要制定参数的类型
        -->
    <insert id="addStu" parameterType="com.zhongruan.bean.Student">
        insert into tb_student(id,name ,sex,age)values (#{id},#{name},#{sex},#{age})
    </insert>
    <delete id="delStu" parameterType="Integer">
        delete from tb_student where id = #{id}
    </delete>
    <update id="updStu" parameterType="com.zhongruan.bean.Student">
        update tb_student set name=#{name},sex=#{sex},age=#{age} where id = #{id}
    </update>
    <select id="getStuById" parameterType="Integer" resultType="com.zhongruan.bean.Student">
--         select id, name as StuName, sex as StuSex,age as StuAge
        select * from tb_Student where id =#{id}
    </select>
</mapper>

测试

package com.zhongruan.test;

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.Test;

import java.io.IOException;
import java.io.InputStream;
public class Test1 {
    @Test
    public void test01() throws IOException {
//        1、先获取会话工厂构造器  sqlSessionFactorybuilder
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//        指定连接配置信息文件
        InputStream is = Resources.getResourceAsStream("sqlMapperConfig.xml");
//        2、根据构造器, 获取会话工厂
        SqlSessionFactory factory = builder.build(is);
        SqlSession session = factory.openSession();
        System.out.println("连接 "+session);
    }
    @Test
    public void test02() throws IOException {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        InputStream is = Resources.getResourceAsStream("sqlMapperConfig.xml");
        SqlSessionFactory factory = builder.build(is);
        SqlSession session = factory.openSession();
        System.out.println("连接 "+session);

//        如何测试 id = "addStu" 这个动态sql
        int r1 = session.insert("StudentMapper.addStu");
        if (r1>0){
            System.out.println("增加成功");
        }
        else {
            System.out.println("增加失败");
        }
        System.out.println("结果为:"+r1);
        session.commit();
        session.close();
    }
}

dao层

package com.zhongruan.dao;

import com.zhongruan.bean.Student;
import org.apache.ibatis.annotations.Param;

import java.awt.*;
import java.util.List;
import java.util.Map;

public interface StudentDao {
// 对学生类的 增删改查
int addStu(Student student);
int delStu(Integer id);
int updStu(Student student);
Student getStuById(Integer id);

// 测试参数绑定
int addStu2(@Param(“id”) int id, @Param(“name”) String name,
@Param(“sex”) String sex, @Param(“age”) String age);

int addStu3(List list);

int addStu4(Map map);

}

当只使用mybatis框架时,mapper文件与dao层平级都处于dao包下

动态sql语句根据不同的参数类型,编写sql语句

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--给Mapper绑定接口-->
<mapper namespace="com.zhongruan.dao.StudentDao" >
   <!-- 测试student增加
           动态sql: id值是sql引用名
           参数的绑定  1、需要制定参数的类型
        -->
    <insert id="addStu" parameterType="com.zhongruan.bean.Student">
        insert into tb_student(id,name ,sex,age)values (#{id},#{name},#{sex},#{age})
    </insert>
    <delete id="delStu" parameterType="Integer">
        delete from tb_student where id = #{id}
    </delete>
    <update id="updStu" parameterType="com.zhongruan.bean.Student">
        update tb_student set name=#{name},sex=#{sex},age=#{age} where id = #{id}
    </update>
    <select id="getStuById" parameterType="Integer" resultType="com.zhongruan.bean.Student">
--         select id, name as StuName, sex as StuSex,age as StuAge
        select * from tb_Student where id =#{id}
    </select>

    <!--    Mapper中动态sql各种参数形式的绑定传递
                            1、基本类型:单个  或者  多个
                                    单个参数的传递声明  parameterType ="java.lang.Integer"
                                    多个参数的声明: ibatis 注解 @Param.
                            2、引用类型: 单个对象  或者 多个对象
                                       单个对象的声明 parameterType="com.zhongruan.bean.Student"
                                       多个对象的声明也可以使用注解
                            3、数组  或者  集合:单个数组  单个List  或者Map


                            -->
    <insert id="addStu2">
/*#{@Param()}*/
        insert into tb_student (id,name,sex,age) values (#{id},#{name},#{sex},#{age})
    </insert>
    <insert id="addStu3" parameterType="java.util.ArrayList">
        insert  into tb_student (id,name,sex,age)
        values (
        <foreach collection="list" item="item1" separator=",">
            #{item1}
        </foreach>
        )
    </insert>

    <insert id="addStu4" parameterType="Map">
        insert into tb_student(id,name,sex,age)
        values  (
            #{id},#{name},#{sex},#{age}
        )
    </insert>

</mapper>

测试类

package com.zhongruan.test;

import com.zhongruan.bean.Student;
import com.zhongruan.dao.StudentDao;
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.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.*;

public class Test3 {
    @Test
    public void test01() throws IOException {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        InputStream is = Resources.getResourceAsStream("sqlMapperConfig.xml");
        SqlSessionFactory factory = builder.build(is);
        SqlSession session = factory.openSession();
        StudentDao studentDao = session.getMapper(StudentDao.class);
        Student student = new Student(4,"小学","男","18");
        int i = studentDao.addStu(student);
        session.commit();
        session.close();
        System.out.println(i);
    }
    @Test
    public void test02() throws IOException {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        InputStream is = Resources.getResourceAsStream("sqlMapperConfig.xml");
        SqlSessionFactory factory = builder.build(is);
        SqlSession session = factory.openSession();
        StudentDao studentDao = session.getMapper(StudentDao.class);
        int i = studentDao.addStu2(5,"小鱼","男","18");
        session.commit();
        session.close();
        System.out.println(i);
    }
    @Test
    public void test03() throws IOException {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        InputStream is = Resources.getResourceAsStream("sqlMapperConfig.xml");
        SqlSessionFactory factory = builder.build(is);
        SqlSession session = factory.openSession();
        StudentDao studentDao = session.getMapper(StudentDao.class);
        List stuList = new ArrayList();
        stuList.add(8);
        stuList.add("小站");
        stuList.add("男");
        stuList.add("18");
        int i = studentDao.addStu3(stuList);
        session.commit();
        session.close();
        System.out.println(i);
    }
    @Test
    public void test04() throws IOException {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        InputStream is = Resources.getResourceAsStream("sqlMapperConfig.xml");
        SqlSessionFactory factory = builder.build(is);
        SqlSession session = factory.openSession();
        StudentDao studentDao = session.getMapper(StudentDao.class);
        Map map = new HashMap();
        map.put("id","9");
        map.put("nam","笑花");
        map.put("sex","男");
        map.put("age","18");
        int i = studentDao.addStu4(map);
        session.commit();
        session.close();
        System.out.println(i);
    }
}

新建User类,编写根据返回值类型不同的动态sql语句

package com.zhongruan.bean;

public class User {
    private int id;
    private String username;
    private String password;

    public User() {
    }

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserDao层

package com.zhongruan.dao;

import com.zhongruan.bean.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserDao {
//    查询功能  针对 User
    int getCount();
    User getUserById(@Param("id") int id);
    List<User> getUsers();
}

mapper文件

一定要用 注释否则会被解读

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--给Mapper绑定接口-->
<mapper namespace="com.zhongruan.dao.UserDao" >
    <!-- 分别编写dao的动态sql-->
   <select id="getCount" resultType="Integer">
       select count(*) from tb_user
   </select>
    <select id="getUserById" resultType="com.zhongruan.bean.User">
        select id,username,password
        from tb_user
        where id = #{id}
    </select>
    <select id="getUsers" resultMap="RM_Users">
        select id,username,password from tb_user
    </select>

    <!--定义封装集合模型-->
    <resultMap id="RM_Users" type="com.zhongruan.bean.User">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
    </resultMap>
</mapper>

测试类

package com.zhongruan.test;

import com.zhongruan.bean.User;
import com.zhongruan.dao.UserDao;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class Test4 {
    private SqlSessionFactoryBuilder builder;
    private  InputStream is;
    private SqlSessionFactory factory;
    private SqlSession session ;
    private  UserDao userDao;
    @Before
    public void before() throws IOException {
       builder = new SqlSessionFactoryBuilder();
       is = Resources.getResourceAsStream("sqlMapperConfig.xml");
       factory = builder.build(is);
       session = factory.openSession();
       userDao = session.getMapper(UserDao.class);
    }
    @Test
    public void test01() throws IOException {
        before();
        int i = userDao.getCount();
        User user = userDao.getUserById(7);
        System.out.println("结果为"+i+"。。。"+user.getId()+user.getUsername()+user.getPassword());
        List<User> usersList = userDao.getUsers();
        for (User user1:usersList) {
            System.out.println(user1);
        }
    }
}

MyBatis编写完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值