Mybatis框架概述1
程序员文章站
2022-05-23 19:51:06
...
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>
<!--properties配置属性的元素,用于将内部的配置外在化,即通过外部配置来替换内部定义的属性; -->
<properties resource="db.properties"></properties>
<!-- settings元素主要用于改变MyBatis运行时的行为,例如开启延迟加载等
mapUnderscoreToCamelCase:是否开启自动驼峰命名规则,默认值是false;
cacheEnabled:开启缓存,默认值是false;
lazyLoadingEnabled: 延迟加载,默认值是false;
-->
<settings>
<!-- 控制台打印SQL语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--typeAliases元素给Java对象配置一个简短的名字即 配置别名 ;
package子元素:name属性用于指定被定义别名的包,该包中所有的类都被指定别名
typeAlias子元素:
type属性:被定义别名的类的完全限定名,也就是包名+类名
alias属性:自定义别名的值
如果没有指定alias,MyBatis默认会将类名首字母改为小写作为别名
别名不区分大小写,使用时注意重复-->
<typeAliases>
<typeAlias type="com.mybatis.entity.Student" alias="student"/>
</typeAliases>
<!--environments用于对环境进行配置,实际上也是数据源的配置,可以配置多个数据源,即多种数据库 -->
<environments default="development">
<!--environment可以定义多个,id属性用于定义环境的ID值,包含事务管理和数据源的配置信息 -->
<environment id="development">
<!-- transactionManager元素配置事务管理,type属性用于指定事务管理的方式,包括JDBC、MANAGED
JDBC:直接使用JDBC的提交和回滚设置
MANAGED:让容器管理事务,比如spring容器-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource元素配置数据源,type属性指定使用哪种数据源,包括UNPOOLED、POOLED、JNDI
UNPOOLED:每次请求时都需打开和关闭连接
POOLED:利用数据库连接池,第三方组件
JNDI:应用服务器内置
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--mappers元素用于指定映射文件的位置 -->
<mappers>
<!-- 通过类路径指定 -->
<mapper resource="com/mybatis/mapper/StudentMapper.xml"/>
<!-- 通过本地路径指定 -->
<!-- <mapper url="D:/..."/> -->
<!-- 通过接口指定 ,注意:接口与映射文件的名称要保持一致,并且在同一目录-->
<!-- <mapper class="接口的完全限定名"/> -->
<!-- 通过包名指定,可以理解为批量引入 -->
<!-- <package name="包名"/> -->
</mappers>
</configuration>
<?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">
<!--namespace属性是为了指定唯一命名空间,通常设置成"包名+映射文件名"的形式 -->
<mapper namespace="com.mybatis.mapper.StudentMapper">
<!-- select元素用于映射查询语句,也可以理解为读取数据库中的数据
id:唯一标识符,经常与namespace组合起来使用,如果不唯一,MyBatis会报异常;
parameterType: 传入SQL语句的参数类型(完全限定名或者别名);
resultType:SQL语句执行后返回的类型(完全限定名或者别名);
resultMap: 对resultMap元素进行引用;注意:返回类型时使用resultMap或resultType
timeout: 设置超时参数,单位是秒,如果超时将报异常
-->
<!-- insert元素用于映射插入语句,执行完SQL语句会返回一个表示插入记录数的整数,特有属性如下:
keyProperty:它只针对插入和修改操作,将添加和修改执行SQL语句的返回值赋值给Java对象的某一个属性(主键对应的属性);
keyColumn:它只针对插入和修改操作,设置表的主键位于第几列,当第一列不是主键时需要配置;
useGeneratedKeys:它只针对插入和修改操作,MyBatis使用JDBC的getGeneratedKeys()获取主键,默认是false;
-->
<!-- update元素用于映射修改语句,基本属性与select元素一样,执行完SQL语句会返回一个表示插入记录数的整数,特有属性与insert元素一致 -->
<!-- delete元素用于映射删除语句,基本属性与select元素一样,执行完SQL语句会返回一个表示插入记录数的整数 -->
<!-- sql元素可以更加灵活地定义可重用的SQL代码片段,然后在其他元素中引用该片段-->
<!-- resultMap元素 -->
<sql id="table">id,stuNum,name</sql>
<!-- 相当于JDBC中的预编译 -->
<select id="selectAllStudents" resultType="student" >
<!-- select * from student -->
<!-- include元素的refid属性引用了自定义的代码片段,它的值就是sql元素的id值 -->
select <include refid="table"></include> from student
</select>
<!-- 查询id的学生信息 -->
<select id="selectOneStudent" resultType="student">
<!--${value} -->
select * from student where id=#{id}
</select>
<!-- 查询id大于1的学生 -->
<select id="selectStudents" resultType="student">
select * from student where id> #{id}
</select>
<!-- 根据name模糊查询学生信息 -->
<select id="selectStudentss" resultType="student">
select * from student where name like concat('%',#{name},'%')
</select>
<!-- 添加学生 -->
<insert id="addStudent" parameterType="student" useGeneratedKeys="true" keyProperty="id">
insert into student (stuNum,name) values (#{stuNum},#{name})
</insert>
<!-- 删除学生 -->
<delete id="deleteStudent" parameterType="java.lang.Integer">
delete from student where id=#{id}
</delete>
<!-- 修改学生 -->
<update id="updateStudent" parameterType="student">
update student set stuNum=#{stuNum},name=#{name} where id=#{id}
</update>
</mapper>
对学生进行增删改查(测试类)
public class TestStudent {
public static void main(String[] args) {
selectAllStudents();
//selectOneStudent();
//selectStudents();
//selectStudentss();
//addStudent();
//deleteStudent();
//updateStudent();
//test();
}
/*
* 根据id查询学生
*/
public static void selectOneStudent() {
SqlSession session=null;
try {
session = MybatisUtil.getSqlSession();
//执行SQL语句,selectOne()第一个参数的值是映射文件中mapper元素的namespace值+select元素id值
Student student = session.selectOne("morning.selectOneStudent",3);
System.out.println(student);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
/*
* 修改学生
*/
public static void updateStudent() {
SqlSession session=null;
try {
session = MybatisUtil.getSqlSession();
//执行SQL语句,
Student student = session.selectOne("morning.selectOneStudent",3);
student.setName("大山");
int result = session.update("morning.updateStudent", student);
if(result>0){
System.out.println("修改成功");
}
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
/*
* 删除学生
*/
public static void deleteStudent() {
SqlSession session=null;
try {
session = MybatisUtil.getSqlSession();
//执行SQL语句,
int result = session.delete("morning.deleteStudent", 13);
if(result>0){
System.out.println("删除成功");
}
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
/*
* 添加学生
*/
public static void addStudent() {
SqlSession session=null;
try {
session = MybatisUtil.getSqlSession();
//执行SQL语句,selectList()第一个参数的值是映射文件中mapper元素的namespace值+select元素id值
Student student=new Student("12", "小强");
int result = session.insert("morning.addStudent",student);
if(result>0){
System.out.println("添加成功");
}
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
/*
* 根据name模糊查询学生信息
*/
public static void selectStudentss() {
SqlSession session=null;
try {
session = MybatisUtil.getSqlSession();
//执行SQL语句,selectList()第一个参数的值是映射文件中mapper元素的namespace值+select元素id值
List<Student> list = session.selectList("morning.selectStudentss","小");
for (Student student : list) {
System.out.println(student);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
/*
* 查询id>1的学生信息
*/
public static void selectStudents() {
SqlSession session=null;
try {
session = MybatisUtil.getSqlSession();
//执行SQL语句,selectList()第一个参数的值是映射文件中mapper元素的namespace值+select元素id值
List<Student> list = session.selectList("morning.selectStudents",1);
for (Student student : list) {
System.out.println(student);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
/*
* 查询所有学生
*/
public static void selectAllStudents() {
SqlSession session=null;
try {
session = MybatisUtil.getSqlSession();
//执行
List<Student> list = session.selectList("com.mybatis.mapper.StudentMapper.selectAllStudents");
for (Student student : list) {
System.out.println(student);
}
} catch (Exception e) {
// TODO Auto-generated catch block0
e.printStackTrace();
}finally{
session.close();
}
}
}
2.mybatis的主要结构
上一篇: Python学习笔记--Python 爬虫入门 -19 Django
下一篇: maven阿里云镜像