MyBatis基于XML开发

基于注解和基于XML开发对比:

入门案例

项目结构:

SQL数据库准备
create table student(
 stuid int PRIMARY KEY auto_increment comment '编号',
 stu_name varchar(20) comment '姓名',
 gender TINYINT UNSIGNED comment '性别, 1:男,2:女',
 birthday DATE comment '生日',
 `desc` varchar(100) comment '介绍'
) comment '学生表';

insert into student values(null, '张三',1,'2021-3-4','在吃饭');
insert into student values(null, '李四',1,'2021-3-4','在吃饭');
insert into student values(null, '王五',2,'2021-3-4','在吃饭');
insert into student values(null, '刘六',2,'2021-3-4','在吃饭');
insert into student values(null, '张孙四',1,'2021-3-4','在吃饭');

select * from student;
JavaBean

package org.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private Integer stuId;
    private String stuName;
    private Integer gender;
    private Date birthday;
    private String desc;
}
映射类

package org.mapper;

import org.apache.ibatis.annotations.Param;
import org.domain.Student;

import java.util.List;

public interface StudentMapper {
    // 查询所有
    List<Student> selectAllStu();

    // 根据id查询
    public Student selectById(@Param("stuId") Integer stuId);

    //添加
    void insertStu(Student student);

    //更新
    void update(Student student);

    //删除
    void delete(@Param("stuId") Integer stuId);
}
测试类

package mapper;

import org.apache.ibatis.session.SqlSession;
import org.domain.Student;
import org.junit.Test;
import org.mapper.StudentMapper;
import org.utils.MyBatisUtils;

import java.util.Date;
import java.util.List;

public class TestStudentMapper {
    @Test
    public void selectAll(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students = mapper.selectAllStu();
        students.forEach(System.out::println);
        MyBatisUtils.close(sqlSession);
    }

    @Test
    public void selectById(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        mapper.selectById(1);
        MyBatisUtils.close(sqlSession);
    }

    @Test
    public void insertStu(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = new Student(null,"ss",11,new Date(),"在上学");
        mapper.insertStu(student);
        MyBatisUtils.close(sqlSession);
    }

    @Test
    public void updateStu(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = new Student(6,"ss",11,new Date(),"在上学");
        mapper.update(student);
        MyBatisUtils.close(sqlSession);
    }

    @Test
    public void deleteStu(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        mapper.delete(7);
        MyBatisUtils.close(sqlSession);
    }
}
新增:添加 映射对应配置文件 *Mapper.xml

mapper文件为自定义内容,xml文件建议与接口名一致。

自定义映射关系
 <resultMap id="名称" type="结果封装的JavaBean类型">
  <result property="JavaBean属性" column="表的列名"></result>
</resultMap>

namespace:映射类全限定类名(包名.类名)
id:方法名
resultType:返回值类型,参数类型
<?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="org.mapper.StudentMapper">
    <select id="selectAllStu" resultType="org.domain.Student">
        select stuid,stu_name stuName,gender,birthday,`desc` from student;
    </select>

    <resultMap id="stuResultMap" type="org.domain.Student">
        <result property="stuName" column="stu_name"></result>
    </resultMap>
    <select id="selectById" resultMap="stuResultMap" parameterType="Integer">
        select * from student where stuid = #{stuId}
    </select>

    <insert id="insertStu" parameterType="org.domain.Student" keyProperty="stuId">
        insert into student values (null, #{stuName}, #{gender},#{birthday},#{desc});
    </insert>

    <update id="update" parameterType="org.domain.Student" keyProperty="stuId">
        update student set stu_name = #{stuName},gender = #{gender}, birthday = #{birthday},`desc` = #{desc} where stuid = #{stuId};
    </update>

    <delete id="delete" parameterType="Integer">
        delete from student where stuid = #{stuId};
    </delete>
</mapper>
新增:核心配置加载xml

SQLMapConfig源代码

<?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>
        <!--在控制台输出发送的sql日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>

            <!--目前只关注这部分内容,它的作用就是声明要连接的数据信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="用户名"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--声明含有sql的接口所在包-->
<!--        <package name="org.mapper"/>-->
        <mapper resource="mapper/OrderMapper.xml"></mapper>
    </mappers>
</configuration>
MyBatisUtils源码
package org.utils;

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 java.io.IOException;
import java.io.InputStream;

public class MyBatisUtils {
    private static SqlSessionFactory sessionFactory;

    static {
        try {
            //1 获得核心配置文件
            InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");

            //2 加载核心配置文件,获得连接工厂
            sessionFactory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

    public static SqlSession getSqlSession() {
        SqlSession session = sessionFactory.openSession();
        return session;
    }

    public static void close(SqlSession session) {
        if(session != null) {
            //事务打开了,需要提交
            session.commit();

            //6 释放资源
            session.close();
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值