基于注解和基于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();
}
}
}
2171

被折叠的 条评论
为什么被折叠?



