Java 原生MyBatis开发

步骤:

1、添加依赖 pom.xml

<dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis</artifactId>

      <version>3.5.15</version>

</dependency>

<dependency>

      <groupId>com.mysql</groupId>

      <artifactId>mysql-connector-j</artifactId>

      <version>8.3.0</version>

</dependency>

2、定义数据表

create table if not exists tbl_users(

	id bigint primary key auto_increment,

    username varchar(32) not null,

    password varchar(32) not null,

    birth date,

    sex boolean default 1,

    salary numeric(8,2)

)engine=innodb default charset utf8;

3、定义MyBatis的核心配置文件 resources/mybatis-config.xml

        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>

    <settings>  运行时常量配置

        <setting name="logImpl" value="STDOUT_LOGGING"/>  在控制台上输出所执行的SQL语句

    </settings>

    <typeAliases> 类型别名的声明

        <typeAlias type="com.yan.entity.User" alias="User"/>  type是具体的类型名称,alias是别名,在映射元文件中可以使用别名来替代全名,简写配置

    </typeAliases>

    <environments default="yan">  运行环境配置,在具体的应用开发中,经常会有不同的环境配置,例如开发、测试和生产环境。default用于指定默认使用的配置,值应该是多个环境配置中的一个id对应的值

        <environment id="yan">  一个具体的环境配置,id作为标识,不允许重复。在一个数据源的环境配置中需要配置transactionManager事务管理器和dataSource数据源两部分

            <transactionManager type="JDBC"/>  声明事务管理器,type可以取值为JDBC和Managed两种,一般非分布式事务使用JDBC;而分布式事务采用managed。

            <dataSource type="POOLED"> 数据源配置,type可选值有3种:UNPOOLED直连方式连接数据库管理系统,一般仅仅用于环境测试;POOLED是MyBatis提供的简单连接池的实现,一般用于开发阶段,在具体应用生产环境种一般会切换为产品级连接池,例如druid;JNDI是采用由容器提供的连接池,只能用于生产环境。具体生产环境种是否使用,取决于开发计划。

                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>配置驱动串

                <property name="url" value="jdbc:mysql:///shop?serverTimezone=UTC"/> 配置连接串

                <property name="username" value="root"/> 配置连接的用户名

                <property name="password" value="123456"/> 配置连接的口令

                <!-- 如果使用POOLED连接池,实际上还有连接池相关的配置 -->

            </dataSource>

        </environment>

    </environments>

</configuration>

4、定义实体类。

        实体类的定义可以参照表结构进行定义

@Data

public class User implements Serializable {

    private Long id;

    private String username;

    private String password;

    private Date birth;

    private Boolean sex;

    private Double salary;

}

5、定义映射元文件。resources/mapper/UserMapper.xml

        用于说明实体类和表之间的对应关系、表的列和类种的属性之间的对应关系、所做的CRUD操作的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.yan.mapper.UserMapper">  引入namespace名空间是为了避免当前映射文件中的命名冲突问题。

    <resultMap id="BaseResult" type="User"> 结果映射。主要用于将查询结果ResultSet转换为实体类对象

        <id property="id" column="id" jdbcType="BIGINT"/>  用于定义主键和标识属性,property声明属性名称,column声明对应的列名称,jdbcType用于声明对应的数据类型,类型名称和数据库表种的列类型名称基本一致,注意全大写,这是常量名

        <result property="username" column="username" jdbcType="VARCHAR"/> 用于定义非主键列和属性之间的对应关系

        <result property="password" column="password" jdbcType="VARCHAR"/>

        <result property="birth" column="birth" jdbcType="DATE"/>

        <result property="sex" column="sex" jdbcType="BOOLEAN"/>

        <result property="salary" column="salary" jdbcType="DECIMAL"/>

    </resultMap>

    <insert id="insert" parameterType="com.yan.entity.User"> insert操作,id是对应的名称,调用对应的SQL语句的名称statementId为【namespace+.+id】,parameterType用于指定调用SQL语句时所需要的参数类型,针对增删改操作不需要声明返回值类型,因为返回值类型固定为int,表示修改操作的受影响行数。

        insert into tbl_users(username,password

        <if test="birth!=null">  动态SQL。注意在标签内部的名称都是属性名称,SQL语句中的都是列名称,#{}表达式中是属性名称

            ,birth

        </if>

        ) values(#{username},#{password}

        <if test="birth!=null">

            ,#{birth}

        </if>

        )

    </insert>

    <delete id="delete" parameterType="long">

        delete

        from tbl_users

        where id = #{id}

    </delete>

    <select id="load" parameterType="long" resultMap="BaseResult"> 查询操作,id是语句编号,parameterType是参数类型,long实际上是MyBatis定义的别名,resultMap用于调用<resultMap>定义的规则,将ResultSet转换为值bean对象

        select *

        from tbl_users

        where id = #{id}

    </select>

    <update id="update" parameterType="User">

        update tbl_users set username=#{username}

        <if test="password!=null">

            ,password=#{password}

        </if>

        ,birth=#{birth},sex=#{sex},salary=#{salary} where id=#{id}

    </update>

    <select id="selectAll" resultMap="BaseResult">

        select * from tbl_users

    </select>

</mapper>

6、需要将映射元文件注册到核心配置文件中 mybatis-config.xml

<mappers>

        <mapper resource="mapper/UserMapper.xml"/>

</mappers>

7、编码调用

  • Insert
public class Insert {

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

        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");//使用mybatis提供的工具类Resources获取读取核心配置文件的输入流,字节和字符都可以

        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //使用MyBatis提供的工具类SqlSessionFactoryBuilder创建SqlSessionFactory对象,构建时会自动解析从输入流中读取到配置内容

        SqlSession session = sessionFactory.openSession();  //使用工厂类创建SqlSession会话对象
        User user=new User();

        user.setUsername("lisisi");

        user.setPassword("444444");

        user.setBirth(new java.sql.Date(new java.util.Date().getTime()));

        int inserted = session.insert("com.yan.mapper.UserMapper.insert", user);  //利用会话对象调用映射元文件中定义的SQL语句

        session.commit(); //一般持久层框架都是默认事务回滚,所以修改后需要手动提交事务,否则修改无效  

        if(inserted>0)

            System.out.println("插入成功!");

        session.close();  //session实际上是Connection对象的一个浅封装,所以需要保证session及时关闭

    }

}
  • Delete
public class Delete {
    public static void main(String[] args) throws IOException {
        InputStream r = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(r);
        SqlSession session = sessionFactory.openSession();
        int delete =session.delete("com.test.mapper.UserMapper.delete",1L);
        session.commit();
        session.commit();
        if (delete>0){
            System.out.println("删除成功!");
        }
    }
}
        SelectOne
public class SelectOne {
    public static void main(String[] args) throws IOException {
        InputStream r = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(r);
        SqlSession session = sessionFactory.openSession();
        User user = session.selectOne("com.test.mapper.UserMapper.load", 4L);
        session.close();
        System.out.println(user);
    }
}
  • Update
public class Update {
    public static void main(String[] args) throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();
        User user = session.selectOne("com.test.mapper.UserMapper.load", 2L);
        user.setSex(true);
        user.setSalary(2000.0);
        int update = session.update("com.test.mapper.UserMapper.update", user);
        session.commit();
        session.close();
        if (update>0)
            System.out.println("修改成功");
    }
}
  • SelectAll
public class SelectAll {
    public static void main(String[] args) throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();
        List<User> users = session.selectList("com.test.mapper.UserMapper.selectAll");
        session.commit();
        users.forEach(System.out::println);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值