MyBatis的一个例子

2021/11/11 6:11:56

本文主要是介绍MyBatis的一个例子,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

MyBatis的一个例子

  • 前提条件
  • 创建maybatis全局配置文件
  • 编写SQL映射配置文件(mapper.xml文件)
  • mapper.xml文件
  • 加载映射文件
  • 导入日志文件
  • 编写测试代码

参考:唐浩荣–Mybatis3详解(二)----Mybatis的第一个入门实例

前提条件

  • 一个数据库
  • 一个maven项目
  • maven项目中配好依赖
  • 创建一个实体类,实体类中有若干属性
  • 然后进入mybatis部分

创建maybatis全局配置文件

在resources目录下创建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">

<!-- MyBatis的全局配置文件 -->
<configuration >
    <!--    1、配置环境,可配置多个环境(比如:开发,测试)-->
    <environments default="develop">
        <environment id="develop">
            <!--     1.1 配置事务管理方式:JDBC/MANAGED
            JDBC:将事务交给JDBC管理(推荐)
            MANAGED:自己管理实务-->
            <transactionManager type="JDBC"></transactionManager>
            <!--      1.2配置数据源,即连接池 JNDI/POOLED/UNPOOLED
                 JNDI:已经过时
                 POOLED:使用连接池(推荐)
                 UNPOOLED:不使用连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/younghedb?characterEncoding=utf8"/>
               <!--property元素就是数据库相关的配置信息-->
                <property name="username" value="数据库用户"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <!--2、导入Mapper配置文件,如果mapper文件有多个,可以多个mapper导入-->
<mappers>
    <mapper resource="EmpMapper.xml"></mapper>
</mappers>
</configuration>

编写SQL映射配置文件(mapper.xml文件)

仍旧是在resources下创建一个mapper.xml文件,mybatis中所有数据库的操作都会基于该映射文件配置的SQL语句。
mapper.xml文件中的属性的作用

相关属性描述
namespacenamespace是mapper配置文件的唯一标识,不同Mapper文件的namespace值应该保证唯一,在程序中通过[ namespace + id ]定位到要执行哪一条SQL语句
idsql映射语句的唯一标识,sql语句封装到mappedStatement对象中,mappedStatement对象的标识
parameterType指定输入参数的类型
resultType指定输出结果的类型,mybatis将查询结果的记录(行),映射成resultType指定的类型的对象,就是上一篇中,对象和记录的映射。如果有多条数据,则分别进行映射,并把对象放到List容器中。
#{value}#{value}表示SQL语句的占位符,会自动进行java类型和jdbc类型转换,相当于jdbc中的“?”,不能空。
${value}表示拼接SQL字符串,将接收到的参数在不进行jdbc类型转换的情况下拼接在SQL语句中。
#{value}和${value}的区别${}是Properties文件中的变量占位符,用于标签属性值和SQL内部,属于静态文本替换,#{}是SQL参数占位符,mybaits会将#{}替换成?,在sql执行前用preparedStatement的参数设置方法,按序给sql的?号占位符设置参数值。

mapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!--xml声明-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--2.3.4xml约束-->
        <!--
          不同Mapper文件的namespace值应该保证唯一
          在程序中通过[ namespace + id ]定位到要执行哪一条SQL语句
         -->
<mapper namespace="EmpMapper">
<!--    namespace是名称组件不能重复-->
    <!--  通过select,insert,update,delete标签声明要执行的SQL  -->
    <!--   查询emp表中所有员工信息
            resultType指定查询的结果将会封装到什么类型
            即使最终返回的结果是集合,resultType也只需要知道你给结合中的泛型即可-->
<select id="findAll" resultType="cn.itpc.pojo.Emp">
-- select就是数据库查询语句的标签   resultType就是返回值类型,写法是包名加类名 而对应的test文件中就是写namespace.id
    select * from emp
</select>
    <!--    练习2:新增员工信息  赵云  保镖 6000
            增删改的标签上不用制定resultType 因为返回值是int类型-->
    <update id="insert">
        insert into emp value (null,"赵云","保镖",6000)
    </update>

    <update id="update">
        update emp set job="花滑运动员",salary=400000 where name="羽生结弦"
    </update>
<delete id="delete">
    delete from emp where name ="张三"
</delete>

    <select id="findById" resultType="cn.itpc.pojo.Emp">
         select * from emp where id=#{id}
    </select>

<!--    &#45;&#45; 如果通过map集合传递参数,需要保证占位符中的变脸名和map集合中的key保持一致-->
<!--    &#45;&#45; 如果pojo对象传输参数,需要保证占位符中的变量名和对象的属性名保持一直,或者在pojo中有对应的get方法-->
<!--    insert  into emp values (null,#{name},#{job},#{salary})-->

    <update id="insert2">
        insert  into emp values (null,#{name},#{job},#{salary})
    </update>

    <!--   练习7:修改员工信息:张飞  架构师  25000 -->
    <update id="update2">
        update emp set job=#{job},salary=#{salary} where name=#{name}
    </update>
    <!--   练习8:删除emp表中指定ID的员工信息 -->
    <update id="delete2">
        delete from emp where id=#{id};
    </update>
    <!--    练习9:动态指定要显示的列-->
    <select id="findAll2" resultType="cn.itpc.pojo.Emp">
        select ${cols} from emp
    </select>

    <!--    练习10:根据name模糊查询emp-->
    <select id="findAll3" resultType="cn.itpc.pojo.Emp">
        select * from emp where name like '%${name}%'
-- ${}是符号 % 表示前面或后面任意字符或字符串
    </select>

    <!--    练习11:根据name模糊查询emp表-->
    <select id="findAll4" resultType="cn.itpc.pojo.Emp">
        select * from emp where name like #{name}
    </select>
</mapper>

加载映射文件

创建的mapper.xml文件添加到全局配置文件下
上面的已经加过了

指定映射配置文件mapper.xml的位置
<mappers>
    <mapper resource="EmpMapper.xml"></mapper>
</mappers>

导入日志文件

在resources目录中创建log4j.properties文件,并且导入如下配置

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

编写测试代码

最后创建一个测试类

package cn.itpc.mybaitis;

import cn.itpc.pojo.Emp;
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.jupiter.api.Test;

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

//练习 查询emp表中所有的员工,返回一个List<emp>集合
public class TestMyBatis01 {
//    SqlSession session;
//
//    @Before
//    public void init() throws IOException {
//        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//        SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
//        session = fac.openSession();
//
//    }



    //1、读取mybatis的核心配置文件(mybatis-config.xml)
    //2、通过配置信息获取一个SqlSessionFactory工厂对象
    //3、通过工厂获取一个SqlSession对象
    //4、通过namespace+id找到要执行的sql语句并执行
    //5、输出结果
        @Test
        public void findAll() throws IOException {
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
            SqlSession session = fac.openSession();

            List<Emp> list = session.selectList("EmpMapper.findAll");
            for (Emp e:list){
                System.out.println(e);
            }
        }


        @Test
    public void testInsert() throws IOException {
            //执行sql语句,返回执行结果
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
            SqlSession session = fac.openSession();
        int row=session.update("EmpMapper.insert");
            //提交事务
            session.commit();
            System.out.println("影响的行数:"+row);
        }
    @Test
    public void testupdate() throws IOException {
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    int row=session.update("EmpMapper.update");
    session.commit();
}

@Test
    public void testdelete() throws IOException {
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    int row=session.delete("EmpMapper.delete");
    session.commit();
}

@Test
    public void testFindById() throws IOException {
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    Emp emp=session.selectOne("EmpMapper.findById");
    System.out.println(emp);
}
@Test
public void testInsert2() throws IOException {
            Emp emp=new Emp();
    emp.setName("张飞");
    emp.setJob("工程师");
    emp.setSalary(12334.0);

    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    int row = session.update("EmpMapper.insert2",emp);
    session.commit();
    System.out.println("影响的行数:"+row);
}

@Test
    public void testupdate2() throws IOException {
            Emp emp=new Emp();
            emp.setName("张飞");
            emp.setJob("架构师");
            emp.setSalary(2222.2);
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    int row=session.update("EmpMapper.update2",emp);
    session.commit();
    System.out.println("影响的行数"+row);
}
@Test
    public void testInsert3() throws IOException {
            Map map=new HashMap<>();
            map.put("name","曹操");
            map.put("job","总裁办公室");
            map.put("salary","20000");
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    int row=session.update("EmpMapper.insert2",map);
    session.commit();
    System.out.println("影响行数"+row);


}
@Test
    public void testDelete2() throws IOException {
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    int row=session.update("EmpMapper.delete2",5);
    session.commit();
    System.out.println("影响行数"+row);
}

@Test
public void testFindAll2() throws IOException {
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    Map map=new HashMap();
    map.put("cols","id,name");
   // map.put("cols","id,name,jpb,salary");
    List<Emp> list=session.selectList("EmpMapper.findAll2",map);

    for (Emp e:list){
        System.out.println(e);
    }

}



@Test
    public void testFindAll3() throws IOException {
            Map map=new HashMap();
            map.put("name","云");
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    List<Emp> list=session.selectList("EmpMapper.findAll3",map);
    for (Emp e:list){
        System.out.println(e);
    }
}

@Test
    public void testFindAll4() throws IOException {
            Map map=new HashMap();
            map.put("name","%生%");
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
    SqlSession session = fac.openSession();
    List<Emp> list=session.selectList("EmpMapper.findAll4",map);
    for(Emp e:list){
        System.out.println(e);
    }


}
    }






这篇关于MyBatis的一个例子的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程