mybaits入门案例,mybatis-helloword

1、mybaits是什么?
mybatis是一个基于jdbc的持久化框架,
什么叫持久化,我们吧数据分为两种:一种瞬时数据,一种叫永久数据, 就是指的吧瞬时数据编程持久化数据的一个过程。mybatis就是基于jdbc吧我们的数据从瞬时变为持久化,mybatis底层是基于jdbc实现的。

2、mybatis入门案例
新建一个maven项目

这里写图片描述
1、pom.xml导入maven依赖:

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.0</version>
    </dependency>

2、编写mybatis的配置文件,
在项目中com.config下新建一个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>
    <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/test" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml" />
    </mappers>
</configuration>

mybatis引入了数据库连接池的概念, 在原生的jdbc中,我们数据库链接是使用的时候就创建,使用完毕就销毁,这样对我们程序性能消耗,hiberante首先提出使用数据库连接池的概念,mybatis也是用了这个技术,所以我们mybatis自带一个数据库连接池,我们做测试可以使用,到那时生产环境我们需要使用第三方专业的数据库连接池框架。

3、获取mybatis和数据库链接 Connection,但是在mybatis他补交connection叫sqlsession, 而且mybatis由于使用了数据库连接池,所以我们应该先拿到数据库连接池,在从池子里面拿到sqlsession,数据库连接池是以工厂设计模式,我们的数据库连接池实际山就是一个生产数据库链接的工厂。
所以我们先获取mybatis的数据库连接池,”会话工厂“ SqlSessionFactory
然后在从会话工厂里面能拿到数据库会话 SqlSession
代码如下:

package com.xingxue.utils;

import java.io.IOException;
import java.io.InputStream;

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

public class MyBatisUtils {

    public static void main(String[] args) throws IOException {

        //获取会话工厂
        InputStream is = Resources.getResourceAsStream("com/config/mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); 
        System.out.println(factory);

        //获取会话
        SqlSession session = factory.openSession();
        System.out.println(session);

    }

}

我们发现mybatis的包都是ibatis的名字,那是因为我们mybatis3.0以前都叫ibatis

4、利用mybatis查询数据
根据mybatis的架构配置,可以使用实体类来进行数据交互,也可以不使用实体类。
使用实体类:
表:
1、我们需要为对应的数据表创建一个实体类类

     package com.xingxue.entity;

import java.util.Date;

public class TypeBean {
    private int id;
    private String name;
    private String statu;
    private Date createdate;
    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 getStatu() {
        return statu;
    }
    public void setStatu(String statu) {
        this.statu = statu;
    }
    public Date getCreatedate() {
        return createdate;
    }
    public void setCreatedate(Date createdate) {
        this.createdate = createdate;
    }

}

2、创建一个dao,此时的dao不是我们的java的类了,因为mybatis就是我们的dao,所以我们只需要按照mybtais的规则去创建dao的文件可以了。 mybatis吧dao抽象成了一个xml文件,然后在xml文件编写sql语句,后面mybatis提供了特定的方法去调用这个xml文件里面的sql片段,支持我们需要吧路径配置正确:

<?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.xingxue.entity.TypeDao">

    <select id="selectType" resultType="com.xingxue.entity.TypeBean">
        select * from type where id = 1
    </select>

</mapper>   

namespace:表示该xml文件对外的名字
select上面又一个id,表示mybatis对外调用sql片段的唯一标记,resultType表示返回的数据类型
3、吧该实体类对应的xml文件用mybatis管理起来,

<?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/test" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/xingxue/entity/TypeMapper.xml"/>
    </mappers>


</configuration>

利用mappers配置引入该sql片段的xml文件,如果又多个,就在里面增加mapper配置即可

4、利用mybatis的sqlsession调用该sql片段

TypeBean type = session.selectOne("com.xingxue.entity.TypeDao.selectType");

        System.out.println(type.getName());

com.xingxue.entity.TypeDao.selectType及对应xml里面的namespace.id ,mybaits就会根据这个路径找到对应的sql执行之后返回结果。

总结:mybatis通过吧sql代码和java代码分开管理,能让我们程序最高程度的高类聚低耦合。

查询多条数据就需要调用selectList,返回值就直接是List:
sql配置如下:

<!-- 分页查询数据 -->
    <select id="selectTypeByPage" resultType="com.xingxue.entity.TypeBean">

        select * from type
    </select>

java代码写法:

List<TypeBean> list = session.selectList("com.xingxue.entity.TypeDao.selectTypeByPage");
        System.out.println(list);

mybatsi会吧查询到的数据自动封装成我们的实体类类型,然后在装入一个list集合,然后在返回给我们的调用者

增删该操作基本一样,只是需要注意mybatis不自动提交事务,需要我们调用commit方法去手动提交事务

    <insert id="insertType" parameterType="com.xingxue.entity.TypeBean">
        INSERT INTO `test`.`type` (
            `id`,
            `name`,
            `statu`,
            `createDate`
        )
        VALUES
            (
                null,
                #{name},
                #{statu},
                now()
            );


    </insert>


    <update id="updateType" parameterType="com.xingxue.entity.TypeBean">

    UPDATE `test`.`type`
    SET 
     `name` = #{name}

    WHERE
        (`id` = #{id});

    </update>

    <delete id="deleteType" parameterType="com.xingxue.entity.TypeBean">
        delete from type where id = #{id}
    </delete>

java代码:

TypeBean bean = new TypeBean(0, "衣服", "1", null);
        int result = session.insert("com.xingxue.entity.TypeDao.insertType", bean);
        session.commit();
        System.out.println(result);


        bean.setId(7);
        bean.setName("女装");
        int result2 = session.update("com.xingxue.entity.TypeDao.updateType", bean);
        session.commit();

        bean.setId(7);
        int result3 = session.delete("com.xingxue.entity.TypeDao.deleteType", bean);
        session.commit();

mybatis基本操作就是这个样子,参数,我们利用parameterType来标记参数类型,
写法如下:如果是基本数据类型直接写类型名字:

<update id="updateType" parameterType="int">

    UPDATE `test`.`type`
    SET 
     `name` = #{name}

    WHERE
        (`id` = #{id});

    </update>

如果是复杂数据类型就是包名.类名

参数采用占位符来获取, 语法规则是 #{属性名} 如下面的#{id}, id是该TypeBean对象的属性

<delete id="deleteType" parameterType="com.xingxue.entity.TypeBean">
        delete from type where id = #{id}
    </delete>
Mybatis-Plus是Mybatis的增强工具,在开发中有很多使用场景,其中就包括动态表名插件,也就是说,在Mybatis-Plus中,动态表名插件可以实现一个SQL语句的多表关联查询。 动态表名插件是Mybatis-Plus的一种增强插件,在查询过程中,通过钩子的方式,动态生成SQL语句,以实现动态表名的查询。这种方法不仅可以实现多表关联查询,而且还能避免SQL注入攻击。 使用动态表名插件,需要在Mybatis-Plus的配置文件中添加相应的配置,具体操作步骤如下: 1.在pom.xml文件中引入Mybaits-Plus和相关的依赖。 ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.2</version> </dependency> ``` 2.在application.yml文件中添加Mybatis-Plus相关的配置信息。 ```yml mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml type-aliases-package: com.example.model configuration: map-underscore-to-camel-case: true sql-injector: com.baomidou.mybatisplus.extension.injector.LogicSqlInjector global-config: db-config: logic-delete-value: 1 logic-not-delete-value: 0 ``` 3.编写Mapper.xml文件,使用动态表名插件。 ```xml <select id="findUserByName" resultMap="user"> SELECT * FROM ${tableName} WHERE name = #{name} </select> ``` 以上就是使用动态表名插件实现多表关联查询的方法,需要注意的是,在使用动态表名插件时,需要特别小心SQL注入攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值