mybatis-01

 2023-09-19 阅读 32 评论 0

摘要:Mybatis第一天 1、什么是框架:Framework 模板. 简化开发的工具。2、框架学习难度 2.1 应用 =>简单,编写代码简单。 2.2 理解 =>了解框架的开发模式,底层实现,源代码解读。 2.3 开发 =>编写框架,架构师难度。3、My

Mybatis第一天

1、什么是框架:Framework 模板. 简化开发的工具。
2、框架学习难度
 2.1 应用 =>简单,编写代码简单。
 2.2 理解 =>了解框架的开发模式,底层实现,源代码解读。
 2.3 开发 =>编写框架,架构师难度。
3、MyBatis框架
 3.1 历史
  Apache开源组织的开源框架.  iBatis.  版本有1.x和2.x.
  2010年,迁移到google code平台下,更名为MyBatis,版本为3.x
  2014年,迁移到github平台下,沿用命名MyBatis,版本为3.x.
 3.2 框架由来
   3.2.1 快速开发方式 JSP+Servlet+JavaBean开发方式
     免容器启动,可以直接影响开发结果的开发方式.
     结构不完整,维护成本高昂,可复用能力几乎为零.
   3.2.2 MVC架构 JSP+Control开发方式
     技术:JSP+Servlet+JDBC
     优点:结构清晰. 代码部分复用
     缺点:代码结构繁琐, 每次开发有大量重复代码
     重复代码:处理请求参数(getParameter / getParameterValues / getParameterNames),处理文件上传(FileItem),处理文件下载(设置响应类型[application/octet-stream],设置响应头[content-dispositon;attchement;filename=xxxx]),处理AJAX数据返回(java对象->JSON字符串, response.getWriter().print(xxx) response.getWriter().flush())等.
   3.2.3 框架开发(Spring+SpringMVC+MyBatis)
     struts1,hibernate2.x,spring2.x,struts2,iBatis2.x, MyBatis,SpringMVC…….
     优点:使用框架代替基础技术,实现针对性开发(只编写有效的业务代码,减少或杜绝编写重复的逻辑代码). 易于维护,易于升级,扩展
     缺点:学习框架技术,XML配置文件大量出现。
4、MyBatis框架简介
mybatis是ORM框架,也可以称为OXM框架。
MyBatis框架对ORM做了小幅度改动,映射的结果集.不是数据库表和数据,半封装的数据访问层框架。
所有操作都是针对查询结果集实现的映射机制,就是JDBC中的ResultSet。
优点:灵活
缺点:自定义SQL语法
 4.1 什么是ORM?
  Object Relational Mapping 对象,关系型数据库映射。
  将java中的类和数据库的表做映射,将java中的对象和数据库中的行记录做映射,将java对象中的属性和数据库中的字段做映射。
5、Mybatis入门案例(数据库表user的全局查询)
1.定义数据库表格

1 CREATE TABLE `user` (
2   `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户名ID',
3   `username` varchar(20) DEFAULT NULL COMMENT '用户姓名',
4   `userage` int(5) DEFAULT NULL COMMENT '用户年龄',
5   PRIMARY KEY (`userid`)
6 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

2.提供测试数据

3.mybatis的环境的搭建
3.1 资源介绍
mybatis-x.x.x.jar 框架的核心jar包.
mybatis-x.x.x.pdf 官方提供的帮助文档, 英文版.
lib目录 MyBatis框架开发需要的依赖jar包.

3.2创建简单的Java工程项目并导入相应的jar
mybatis-3.2.7.jar  mybatis核心包
lib/*.jar  mybatis所有的依赖包
数据库驱动包

3.3 提供核心配置文件
为了提供数据库访问基础信息的配置文件.
数据库位置(URL), 登录名(username), 密码(password), 驱动类名(driver)
模板内容,核心配置文件的头信息从官方帮助文档中摘取.

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE configuration
3  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4  "http://mybatis.org/dtd/mybatis-3-config.dtd">
5 <configuration>
6     
7 </configuration>

 导入离线dtd文件:mybatis-3-config.dtd(提示相应的根标签,快捷开发)

核心配置文件详情

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4  "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!-- 配置数据库环境 -->
 7     <environments default="development">
 8         <environment id="development">
 9             <!-- 配置Mybatis中的事物管理器
10                    JDBC:使用jdbc的事物来处理
11                    MANAGED:不做任何事物处理
12                 -->
13             <transactionManager type="JDBC" />
14             <!--数据库连接信息
15                    type:
16                        UNPOOLED:直连
17                        POOLED:池连
18                        JNDI:使用容器的池连。需要依赖jndi获取连接对象
19                     -->
20             <dataSource type="UNPOOLED">
21                 <!-- 配置连接的具体参数 -->
22                 <property name="driver" value="com.mysql.jdbc.Driver" />
23                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
24                 <property name="username" value="root" />
25                 <property name="password" value="123456" />
26             </dataSource>
27         </environment>
28     </environments>
29     <!-- 引用映射配置文件 -->
30     <mappers>
31     <!-- resource:相对路径查询资源的属性,相当于当前核心配置文件的位置开始查找 -->
32         <mapper resource="com/boom/pojo/User.xml"/>
33     </mappers>
34 </configuration>
mybatis.xml

3.4 编写pojo实体类和创建mapper配置映射文件

 1 package com.boom.pojo;
 2 
 3 import java.io.Serializable;
 4 
 5 /**
 6  * 实体对应的数据库表
 7  * @project_name mybatis-01 
 8  * @class_name User
 9  * @author Dilraba
10  */
11 public class User implements Serializable {
12     
13     private Integer userid;//用户名ID
14     private String username;//用户姓名
15     private Integer userage;//用户年龄
16     
17     public Integer getUserid() {
18         return userid;
19     }
20     public void setUserid(Integer userid) {
21         this.userid = userid;
22     }
23     public String getUsername() {
24         return username;
25     }
26     public void setUsername(String username) {
27         this.username = username;
28     }
29     public Integer getUserage() {
30         return userage;
31     }
32     public void setUserage(Integer userage) {
33         this.userage = userage;
34     }
35     public User(Integer userid, String username, Integer userage) {
36         super();
37         this.userid = userid;
38         this.username = username;
39         this.userage = userage;
40     }
41     
42     public User() {
43         super();
44     }
45     
46     @Override
47     public String toString() {
48         return "User [userid=" + userid + ", username=" + username + ", userage=" + userage + "]";
49     }
50     
51 }
user-pojo

mapper映射配置文件的头信息

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 <mapper>
6     
7 </mapper>

mapper配置信息的详情(简单的SQL语句的编写)

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 <mapper namespace="suibian">
6     <select id="selectUserAll" resultType="com.boom.pojo.User">
7         select * from user;
8     </select>
9 </mapper>
user.xml

3.5 MyBatis工厂工具类 MyBatisUtils

 1 package com.boom.util;
 2 
 3 import java.io.InputStream;
 4 
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 public class MybatisUtil {
11     private static SqlSessionFactory factory = null;
12     static{
13         try {
14             if(factory == null){
15                 //通过工具类加载配置文件,返回读取配置文件的IO流
16                 InputStream is = Resources.getResourceAsStream("suibian.xml");
17                 //SqlSessionFactoryBuilder创建SqlSessionFactory对象的构建器
18                 factory = new SqlSessionFactoryBuilder().build(is);
19             }
20         } catch (Exception e) {
21             e.printStackTrace();
22         }
23     }
24     //获取mybatis上下文对象
25     public static SqlSessionFactory getSqlSessionFactory(){
26         return factory;
27     }
28     //获取SqlSession
29     public static SqlSession openSession(){
30         return factory.openSession();
31     }
32 }
MybatisUtil

3.6 定义DAO层的接口和接口的实现类

 1 package com.boom.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.boom.pojo.User;
 6 
 7 public interface IUserDao {
 8     //查询user表所有的数据
 9     List<User> selectUserAll();
10     
11 }
接口
 1 package com.boom.dao.impl;
 2 
 3 import java.util.List;
 4 
 5 import org.apache.ibatis.session.SqlSession;
 6 
 7 import com.boom.dao.IUserDao;
 8 import com.boom.pojo.User;
 9 import com.boom.util.MybatisUtil;
10 
11 public class UserDaoImpl implements IUserDao {
12 
13     /**
14      * 查询user表所有的数据
15      */
16     @Override
17     public List<User> selectUserAll() {
18         SqlSession session = MybatisUtil.openSession();
19         return session.selectList("selectUserAll");
20     }
21     
22 }
接口实现类

 3.7 编写测试类测试代码

 1 package com.boom.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.boom.dao.IUserDao;
13 import com.boom.dao.impl.UserDaoImpl;
14 import com.boom.pojo.User;
15 
16 public class MybatisTest {
17 
18     public static void main(String[] args) {
19         
20         /*
21         //1.指定配置文件的名称与路径
22         String resource = "suibian.xml";
23         try {
24             //2.通过工具类加载配置文件,返回读取配置文件的IO流
25             InputStream is = Resources.getResourceAsStream(resource);
26               //3  1.SqlSessionFactoryBuilder创建SqlSessionFactory对象的构建器
27               //   2.SqlSessionFactory:mybatis上下文对象,
28             SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
29             SqlSession session = factory.openSession();
30             List<User> list = session.selectList("selectUserAll");
31             for (User user : list) {
32                 System.out.println(user);
33             }
34         } catch (IOException e) {
35             e.printStackTrace();
36         }
37         */
38         
39         IUserDao ud = new UserDaoImpl();
40         List<User> list = ud.selectUserAll();
41         for (User user : list) {
42             System.out.println(user);
43         }
44     }
45 
46 }
MybatisTest

测试结果

 查询单条数据mapper写法:

1 <select id="selectById" parameterType="int" resultType="com.boom.pojo.User">
2     select * from user where userid = #{userid}
3 </select>

dao接口和实现类

1 //根据id查询数据
2 User selectById(Integer userid);
1 /**
2  * 根据id查询数据
3  */
4 @Override
5 public User selectById(Integer userid) {
6     SqlSession session = MybatisUtil.openSession();
7     return session.selectOne("selectById", userid);
8 }

测试类及结果:

1 //根据id查询数据
2 IUserDao ud = new UserDaoImpl();
3 User selectById = ud.selectById(new Integer(1));
4 System.out.println(selectById);

4、MyBatis框架中的常用查询方法
selectList
查询多数据的方法.
方法定义: <T> List<T> selectList(String statement);
参数:statement - 映射文件中SQL语法对应的标签的ID属性值.
返回值:查询结果
有查询结果,返回对应长度的集合.
无查询结果,返回长度为0的集合对象.
selectOne
查询单一数据的方法.
方法定义:<T> T selectOne(String statement);
参数:statement - 映射文件中SQL语法对应标签的ID
返回值:查询结果
无查询结果,返回null
唯一查询结果,返回对象
多查询结果数据,抛出异常.
5、初试查询结果的映射
MyBatis的映射是针对ResultSet实现的映射关系.
MyBatis(所有的数据访问层框架)底层使用的技术都是JDBC.
可以通过分析ResultSet内容数据,实现映射.
MyBatis框架的默认映射规则是:
根据ResultSet中的字段名作为标准, 查询resultType类型中的property,或field,做数据的设置.
MyBatis忽略property/field的字母大小写.

转载于:https://www.cnblogs.com/cao-yin/p/10060611.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/78324.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息