简介:
1、Mybatis 开源免费框架,原名叫iBatis,2010在google code,2013年迁移到github
2、作用: 数据访问层框架
2.1 底层是对JDBC的封装
3、mybatis优点之一:
3.1 使用mybatis时,不需要编写实现类,只需要写需要执行的sql命令。
环境搭建:
1、导入jar (之前把mysql的驱动包放入tomcat中了,所有在这里没有导入mysql驱动包)
2、在src下新建全局配置文件(编写JDBC四个变量)
2.1 在src目录下新建xml文件 (src/mybatis.xml)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 2-4是引入远程的DTD文件,进行代码的提示 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- default引用environment的id,当前所使用的环境 --> 7 <environments default="default"> 8 <!-- 声明可以使用的环境 --> 9 <environment id="default"> 10 <!-- 使用原生JDBC事务 --> 11 <transactionManager type="JDBC"></transactionManager> 12 <!-- 数据库的连接池 --> 配置JDBC四个变量 13 <dataSource type="POOLED"> 14 <property name="driver" value="com.mysql.jdbc.Driver"/> 15 <property name="url" value="jdbc:mysql://localhost:3306/ssm"/> 16 <property name="username" value="root"/> 17 <property name="password" value="362222"/> 18 </dataSource> 19 </environment> 20 </environments>
21 <mappers>
22 <mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/>
23 </mappers> 24 </configuration>
3、新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml 的文件
3.1 文件的作用: 编写需要执行的SQL语句
3.2 把xml理解成实现类
实现过程是:mybatis底层将xml文件解析反射成实现类进行数据操作
3.3 配置过程 (com/bjsxt/mapper/FlowerMapper.xml)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- namesapce:理解成实现类的全路径(包名+类名) --> 6 <mapper namespace="a.b"> 7 <!-- id:方法名 8 parameterType:定义参数类型 9 resultType:返回值类型 10 11 如果方法返回值是list,在resultType中写List的泛型,因为mybatis对 12 jdbc封装,一行一行读取数据 13 --> 通过反射找到自定义的类 (查询的是List集合,为什么类型是自定义的类??因为底层是对JDBC封装的(ResultSet一次只能读取一行数据),一行数据是一个实体类) 14 <select id="sellAll" resultType="com.bjsxt.pojo.Flower"> 15 select * from flower 16 </select> 17 </mapper>
4、测试结果(只有在单独使用mybatis时使用,最后ssm整合时下面代码不需要编写)
4.1 新建一个包一个类进行测试
1 package com.bjsxt.test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 12 import com.bjsxt.pojo.Flower; 13 14 public class Test { 15 public static void main(String[] args) { 16 InputStream is = null; 17 try { 18 is = Resources.getResourceAsStream("mybatis.xml"); 19 20 } catch (IOException e) { 21 // TODO Auto-generated catch block 22 e.printStackTrace(); 23 } 24 //使用工厂设计模式 25 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); 26 //生产SqlSession SqlSession 封装了mybatis中所有的sql命令 27 SqlSession session=factory.openSession(); 28 29 List<Flower> list = session.selectList("a.b.sellAll"); 30 for(Flower flower:list){ 31 System.out.println(flower.toString()); 32 } 33 session.close(); 34 } 35 }
文件目录
环境搭建详解:
1、全局配置文件中内容
1.1 <transactionManager/> type 属性可取值
1.1.1 JDBC事务管理使用JDBC原生事务管理方式
1.1.2 MANAGED 把事务管理转交给其他容器 (spring使用)
原生JDBC事务 setAutoMapping(false);
1.2 <dataSouce/> type属性
1.2.1 POOLED 使用数据库连接池
1.2.2 UNPOOLED 不使用数据库连接池,和直接使用JDBC一样
1.2.3 JNDI : java命名目录接口技术,(使用java通过接口调用别的语言程序)
数据库连接池
1、在内存中开辟一块空间,存放多个数据库连接对象。
2、JDBC Tomcat Pool 直接由tomcat产生数据库连接池
3、图示
3.1 active 状态:当前连接对象被应用程序使用中
3.2 ldle 空闲状态:等待应用程序使用
4、使用数据库连接池的目的
4.1 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率。
4.1.1 小型项目不适用数据库连接池
5、实现JDBC tomcat Pool的步骤
三种查询方式
1、select() 返回值为List<resultType 属性控制>
1.1 适用于查询结果都需要遍历的需求
下面这是Test测试
1 List<Flower> list = session.selectList("a.b.sellAll"); 2 for(Flower flower:list){ 3 System.out.println(flower.toString()); 4 }
下面只是FlowerMapper.xml文件
<select id="sellAll" resultType="com.bjsxt.pojo.Flower">
select * from flower
</select>
2、selectOne() 返回值Object
2.1 适用于返回结果只是变量或一行数据时
下面这是Test测试
1 int i=session.selectOne("a.b.selById"); 2 System.out.println(i);
下面这是FlowerMapper.xml文件中
<select id="selById" resultType="int">
select count(*) from flower
</select>
3、selectMap() 返回值 Map
3.1 适用于需求需要在查询结果中通过某列的值取到这行数据的需求
3.2 Map<Key,resultType控制>
下面这是Test测试
//把数据库中哪个列的值当做map的key Map<Object, Object> map = session.selectMap("a.b.c","name"); System.out.println(map);
下面这是FlowerMapper.xml文件中
<select id="c" resultType="com.bjsxt.pojo.Flower">
select * from flower
</select>