java代码怎么动态修改xml配置文件内容_MyBatis怎么快速入门

MyBatis是一个优秀的持久层框架,它对JDBC操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等JDBC繁杂的过程代码。

对JDBC进行封装的框架有哪些

Mybatis,Hibernate,dbutils,Spring中的jdbcTemplate。

MyBatis基本原理

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由Mybatis框架执行sql并将结果映射成java对象并返回。

使用JDBC操作数据库存在的问题

数据库连接频繁开启和关闭,会严重影响数据库的性能。代码中存在硬编码,分别是数据库部分的硬编码和SQL执行部分的硬编码。

一、准备工作

我们先要下载MyBatis + Mysql驱动包

Mybaits下载:传送门~

Mysql驱动下载:传送门~

准备项目:

打开IDEA,新建一个简单的Java项目,项目就叫Mybaits吧,在项目Mybaits目录下创建一个libs目录(用于存放项目所要依赖的jar包),那要放哪些jar包呢?

需要的jar包有这些:

72d0307f155f2093570b9be7d6c2eeee.png

把jar包拷贝到libs目录下,别忘了libs → 右键 → Add as Library(这才是真正导入jar包)

目录结构:

d633acc6326b8e5a016438fd1fbf78ca.png

准备数据库:

Mysql数据库,数据库名sys,表名Student(可以使用开发工具Navicat来创建数据库)

Student表:

13dd62b6fb64703474d43988a6f46d24.png

二、 MyBatis快速入门

主要步骤:

1、 创建PO(model)类(根据需求创建)

2、 创建全局配置文件SqlMapConfig.xml(文件名任意)

3、 编写映射文件

4、 加载映射文件,在全局配置文件SqlMapConfig.xml中进行加载

5、 编写一个测试程序,即编写Java代码,连接并操作数据库

编写测试程序的步骤:

a) 读取配置文件。

b) 通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。

c) 通过SqlSessionFactory创建SqlSession。

d) 调用SqlSession的操作数据库方法。

e) 关闭SqlSession。

注意: Mybatis使用的日志包是log4j的,所以需要添加log4j.properties(文件内容可以从mybatis-3.5.5.pdf中拷贝,mybatis-3.5.5.pdf就在下载后的Mybatis的目录里)

最终的目录结构:

4c2c3f9dcc6a3005e4d6c8e5b5dc76e8.png

全局配置文件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="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/sys"/>
                <property name="username" value="root"/>
                <property name="password" value="123456789"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="cn/kkdy/map/StudentMap.xml"/>
    </mappers>
</configuration>

全局配置文件简单说明:

dataSource标签里有4个property,分别表示注册驱动、数据库连接的路径、用户名、密码。mappers标签的子标签mapper用于加载映射文件StudentMap.xml。

映射文件StudentMap.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="mybatis.kkdy">
    <select id="StudentById" parameterType="String" resultType="cn.kkdy.model.Student">
        select * from Student where id = #{id}
    </select>
</mapper>

映射文件简单说明:

命名空间(namespace)用于区分不同的mapper,select标签中的id,通过id可以知道要执行的是哪一个sql语句,parameterType用于表示传进来的参数类型,即#{id}中的参数id的类型,resultType指返回的结果类型。

log4j.properties中的代码:

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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

提示: 以上三个配置文件的代码都可以从文件mybatis-3.5.5.pdf中找到(这个文件就在下载后的Mybatis的目录里),我们只需要拷贝过来修改即可。

Student类(model):

package cn.kkdy.model;

public class Student {

    private String id;
    private String name;
    private int age;
    private String sex;
    private int score;

    public Student() {
    }

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

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getSex() {
        return sex;
    }

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

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

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

TestStu类(测试类):

package cn.kkdy.test;

import cn.kkdy.model.Student;
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 TestStu {

    @Test
    public void test() throws IOException {

        //1、读取配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //2、通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂
        SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(inputStream);

        //3、通过SqlSessionFactory创建SqlSession
        SqlSession session = sqlSession.openSession();

        //4、调用SqlSession的操作数据库方法
        Student s = session.selectOne("mybatis.kkdy.StudentById", "202004");

        System.out.println(s);
        session.commit();
        session.close(); //关闭SqlSession对象
    }
}

运行结果:

Student{id='202004', name='酷酷的猿', age=20, sex='男', score=100}

代码分析:

重点讲解selectOne("mybatis.kkdy.StudentById", "202004")方法中的参数。

第一个参数,mybatis.kkdy就是映射文件中mapper标签中命名空间(namespace)的值,StudentById指的是映射文件中select标签中id的值,总的来说,这个参数就是相当于一个sql语句。

第二个参数,这个参数的值会传递给映射文件中的sql语句中的变量id。

特别说明:

本文仅演示了查询数据库记录,其他数据库操作例如增、删、改都是类似的,只不过是调用了不同的方法而已。

如果要对数据库进行多种操作,可能会出现重复的代码,我们可以通过创建新的方法,并使用注解@Bufore、@After来抽取重复代码。

最后,我为了演示方便,都是直接抛出异常(不建议这样),建议处理异常。

三、总结

MyBatis快速入门,就是这么简单。如果觉得还不错的话,就送我一个赞同吧!如果本文对你有用的话,也欢迎收藏哦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值