MyBatis

MyBatis框架相当于一个增强的JDBC

1.三层架构

​ 界面层:view,与用户交互
​ 业务逻辑层:接收传递的数据,检查数据,计算业务逻辑,调用数据访问层获取数据
​ 数据访问层:与数据库打交道,也叫持久层。

三层对应的包:
	界面层:controller包(servlet)
	业务逻辑层:service包(xxxservice类)
	数据访问层:dao包(xxxDao类)
三层中类的交互
	用户使用界面层---->业务逻辑层---->数据访问层---->数据库
三层对应的处理框架:
	界面层	springmvc
	业务逻辑层	spring
	数据访问层	MyBatis

2.mybatis框架

​ MyBatis是MyBatis SQL Mapping Framework for Java (sql映射框架)
​ 1)sql mapping:sql映射
​ 可以把表中的一行数据映射为一个java对象,操作这个对象就相当于操作表中数据
​ 2)Data Access Objects(DAOs):数据访问,对数据进行增删改查

mybatis提供的功能:
	1.提供了创建Connection,PrepareStatement,ResultSet的能力,不用开发人员创建
	2.提供了执行sql语句的能力
	3.提供了循环sql,把sql结果转为java对象,List集合的能力
	4.提供了关闭资源的能力
开发人员提供sql语句---mybatis处理sql---开发人员得到list集合或java对象

3.mybatis实现

1.	InputStream in = Resources.getResourcesAsStream("namespace的名称.方法名");
	SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
	SqlSessionFactory factory = builder.build(in);
	SqlSession sqlSession = factory.openSession();
	List<Student> stu = sqlSession.selectStudent();
	sqlSession.close();

2.	动态代理:使用SqlSession.getMapper(接口名称.class)获取dao接口的对象;
3.	传入参数:从java代码中把数据传入到mapper文件中的sql语句中
	1)parameterType:写在mapper文件中的一个属性。表示dao接口中方法的参数的数据类型。
		例如StudentDao接口中的查询方法:
		public Student selectStudentById(Integer id);	//此时传入parameterType就是必须是Integer
4.	mybatis其实就是jdbc的封装

5.多个参数,使用@param命名参数
	接口 public List<Student> selectMultiParam(@Param("myName") String name,@Param("myAge") Integer age)
	mapper文件中:
		<select id="" resultType="">
			select * from student where name = #{myN ame} or age = #{myAge}
		</select>
6.	两个占位符的比较
	#{}: 告诉mybatis使用实际的参数值代替,并使用Preparestatement对象执行sql语句
	${}: 告诉mybatis使用$包含的"字符串"替换所在位置。
			使用Statement把sql语句和${}的呢日哦那个连接起来。主要用在替换表明,列名,不同列排序等操作。
	能用#的地方都能用$,不同在于:
		select * from student where id = #{id};
		#的查询语句:select * from student where id = ;	//之后再将id值传给?

		select * from student where id = ${id};
		$的查询语句:select * from student where id = 1001;	//此处是直接将值传了进去,相当于字符串的拼接了
		
		$使用的是statement对象执行sql,效率比Preparestatement低,且有sql注入的风险,安全性低。

4.定义别名

​ 在mybatis配置文件中设置mybatis.xml






5.resultMap结果映射,指定列名和java对象的属性对应关系

​ 1.自定义列值赋值给哪个属性
​ 2.当列名和属性名不同时,就要使用resultMap





<select id="方法名" resultMap="上面定义的id名称">
	sql语句
</select>
	或者

	<select id="方法名" resultType="全限定名称">
		select id as sid,name as sname from student;
	</select>

6.模糊查询like

	<select id="方法名" resultType="全限定名称">
		select * from student where name like #{name};
	</select>

之后传入一个String类型的字符串即可

第二种方式:
在mapper中拼接 like "%" #{name} "%"
<select id="方法名" resultType="全限定名称">
	select * from student where name like "%" #{name} "%";	//空格必须有
</select>

7.动态sql

​ 动态SQL:sql的内容是变化的,可以根据条件获取到不同的sql语句
​ 主要是where部分发生变化
​ 动态sql的实现:使用的是mybatis提供的标签, 和

1) <if>语法
	<if test="判断java对象的属性值">
		部分sql语句
	</if>
2) <where>用来包含多个<if> ,当多个if有一个成立,<where>会自动增加一个where关键字
	并自动去掉if中多余的and,or等

3) <foreach>循环java中的数组,list集合的。主要用在sql的in语句中
	例如:
	select * from student where id in (1,2,3);
	如果想传入1,2,3,则需要java对象传入一个list或者其他容器,用<foreach>来处理这个容器
	<foreach collection="list" item="" open="" close="" separator="" >
    
	</foreach>
	其中:
	collection:表示接口中的方法参数的类型,array就使用list
	item:自定义的,表示数组和集合成员的变量
	open:循环开始时的字符
	close:循环结束时的字符
	separator:集合成员之间的分隔符
	List<Student> studentList = dao.selectStudentForeach(list);
	<foreach collection="list" item="id" open="(" close=")" separator="," >
		#{id}
  </foreach>
4)定义代码片段
	<sql id="studentSql">
    select id,name,age,email from student
</sql>

<select id="selectStudentIf" resultType="com.bjpowernode.domain.Student">
    <include refid="studentSql" />
 </select>

8.主配置文件


​  type属性的取值:
​ POOLED
​ 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
​ 连接池就是用于存储连接的一个容器
​ 容器其实就是一个集合对象, 该集合必须是线程安全的, 通能两个线程拿到同一连接
​ 该集合还必须实现队列的特性:先进先出
​ UNPOOLED
​ 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想.
​ JNDI
​ 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
​ 注意:如果不是web或者maven的war工程,是不能使用的。
​ 若使用tomcat服务器,采用的连接池是dbcp连接池

9.数据库属性配置文件

​ 1)把数据库的配置信息单独放到一个文件中,和mybatis主配置文件分开
​ 目的是便于修改,保存,处理多个数据库的信息。

	在resources目录中定义一个属性配置文件,xxx.properties
	在属性配置文件中用key=value来定义数据
	key:一般使用.来做多级目录
			例如,jdbc.mysql.driver=com.mysql.jdbc.Driver
					jdbc.mysql.url=jdbc:mysql://localhost:3306/ssm
					jdbc.username=root
					jdbc.password=Syp960722..
2) 在mybatis的主配置文件中使用<property>标签指定文件的位置。
	在需要使用值的地方,使用${key}

3)配置多个mapper文件
	第一种方式
		<mappers>
			<mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
			<mapper resource="com/bjpowernode/dao/OrderDao.xml"/>
		</mappers>
	第二种方式
		<mappers>
			<package name="com.bjpowernode.dao" />
		</mappers>

6.PageHelper用来做数据分页的
相当于贴吧分页显示楼层一样

1)将Page Helper加入依赖
2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值