- Mybatis的定义:
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 sql 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
2.使用Mybatis的优点:
(1)Mybatis对JDBC进行了封装,可以简化JDBC代码;
(2)Mybatis自身支持连接池(也可以配置其它连接池),因此可以提高程序效率;
(3)Mybatis是将sql配置在mapper文件中,修改sql只是修改配置文件,类不需要重新加载;
(4)对查询sql执行后返回的ResulrtSet对象,Mybatis会帮我们处理,转换成Java对象;
3. Mybatis框架:
(1)sqlMapConfig.xml是Mybatis的核心配置文件,通过其中的配置可以生成sqlSessionFactory,也就是sqlSession工厂
(2)基于sqlSessionFactory可以生成sqlSession对象
(3)sqlSession是一个既可以发送sql去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4)Executor是sqlSession底层的对象,用于执行sql语句
(5)MapperStatement对象也是sqlSession底层的对象,用于接收输入映射(sql语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
4. 配置Mybatis的核心配置文件(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">
<!-- MyBatis的全局配置文件 -->
<configuration >
<!-- 1.配置开发环境(需设置一个默认的环境) -->
<environments default="develop">
<!-- 这里可以配置多个环境,比如develop,test等 -->
<environment id="develop">
<!-- 1.1.配置事务管理方式:JDBC/MANAGED
JDBC:将事务交给JDBC管理(推荐)
MANAGED:自己管理事务
-->
<transactionManager type="JDBC"></transactionManager>
<!-- 1.2.配置数据源,即连接池方式:JNDI/POOLED/UNPOOLED
JNDI:已过时
POOLED:使用连接池(推荐)
UNPOOLED:不使用连接池
-->
<dataSource type="POOLED">
<property name="driver" value="com.MysqL.jdbc.Driver"/>
<property name="url" value="jdbc:MysqL://localhost:3306/yonghedb?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 2.加载Mapper配置文件(因mapper文件中配置了要执行的sql语句) -->
<mappers>
<!-- 注意路径 -->
<mapper resource="com/tedu/pojo/EmpMapper.xml"/>
</mappers>
</configuration>
5. 创建映射文件mapper.xml(里面封装了对数据库的增删查改操作)
<?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一般指定为当前文件的所在包路径+文件名(在maven项目中是接口)
-->
<mapper namespace="com.tedu.pojo.EmpMapper">
<!-- 通过select、insert、update、delete标签声明要执行的sql -->
<select id="findAll" resultType="com.tedu.pojo.Emp">
select * from emp
</select>
<!--
resultType:返回值类型,简单类型(例如:Integer,String,Emp等)
如果返回集合(List<Emp>),只需配置集合中的元素类型即可!
resultMap:复杂对象结构(例如多表关联查询等),后面用到再讲解
-->
</mapper>
6. 实现测试类,并测试
1、实现findAll方法,代码如下:
public void findAll() throws IOException{
//1.读取sqlMapConfig.xml文件,获取其中的基本信息
InputStream in = Resources.getResourceAsstream("sqlMapConfig.xml");
//2.根据配置信息生成sqlSessionFactory工厂对象,
sqlSessionFactory factory = new sqlSessionFactoryBuilder().build(in);
//3.通过工厂获取一个sqlSession对象(用于执行sql及返回结果)
sqlSession session = factory.openSession();
//4.执行sql语句,查询emp表中的所有记录,封装到List集合中
String sqlId = "com.tedu.pojo.EmpMapper.findAll";
List<Emp> emplist = session.selectList( sqlId );
//5.打印list集合
for(Emp emp : emplist){
System.out.println(emp);
}
}
<insert id="insert">
insert into emp(name,job,salary)
values(#{name}, #{job}, #{salary})
</insert>
java代码示例:
public void testInsert() throws IOException{
//0.加载sqlMapConfig.xml文件,获取所有的配置信息
InputStream in = Resources.getResourceAsstream("sqlMapConfig.xml");
//1.创建工厂对象
sqlSessionFactory factory = new sqlSessionFactoryBuilder().build(in);
//2.通过工厂创建一个sqlSession对象
sqlSession session = factory.openSession();
//3.执行sql语句(namespace+sqlId)
//>>准备参数
Emp emp = new Emp();
emp.setName("马云");
emp.setJob("阿里CEO");
emp.setSalary(10000.0);
//>>执行新增
session.insert("com.tedu.pojo.EmpMapper.insert2",emp);
//4.提交事务
session.commit();
System.out.println("执行完成!");
}
mapper文件配置:
<!-- 7.查询Emp表中指定id的员工信息 -->
<mapper namespace="com.tedu.pojo.EmpMapper">
<select id="findById2" resultType="com.tedu.pojo.Emp">
select * from emp where id=#{id}
</select>
...
java代码示例:
public void testFindEmpById() throws IOException{
//0.加载sqlMapConfig.xml文件,获取所有的配置信息
InputStream in = Resources.getResourceAsstream("sqlMapConfig.xml");
//1.创建工厂对象
sqlSessionFactory factory = new sqlSessionFactoryBuilder().build(in);
//2.通过工厂创建一个sqlSession对象
sqlSession session = factory.openSession();
//3.执行sql语句(namespace+Id)
Emp emp = session.selectOne("com.tedu.pojo.EmpMapper.findById2",1);
//4.输出结果
System.out.println(emp);
}
作者:qq_45340330
来源:CSDN
原文:https://blog.csdn.net/qq_45340330/article/details/94474895
版权声明:本文为博主原创文章,转载请附上博文链接!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。