mybatis 详细学习记录

网友投稿 708 2022-11-14

mybatis 详细学习记录

mybatis 详细学习记录

MyBatis是什么?

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 目前mybatis在github上托管。  git(分布式版本控制,当前比较流程)  MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

mybatis架构

搭建开发环境

(1)导包

(2)导入配置文件

这里我在工程文件下新建了一个和src平级的文件,把有关mybatis配置文件和src文件分离,看去界面更加清晰,因为在ssh开发中你肯定还要配置其它配置文件

这里的log4j.properties主要是为了在后台输出是更加看的清楚执行流程,这个可要可不要.

(3)配需相关文件属性

User.xml

select LAST_INSERT_ID() INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) delete from user where id=#{id} update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}

SqlMapConfig.xml

User.java

public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 /* *提供set和get方法,和toString方法 * */}

MybatisFirst 测试类,进行增删改查

import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.guigu.model.User;public class MybatisFirst { // 会话工厂 private SqlSessionFactory sqlSessionFactory; // 创建工厂 @Before //before在text标签之前执行,所以会创建好sqlSessionFactory对象 public void init() throws IOException { // 配置文件(SqlMapConfig.xml) String resource = "SqlMapConfig.xml"; // 加载配置文件到输入 流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } // 根据id查询用户(得到单条记录) @Test public void testFindUserById() { // 通过sqlSessionFactory创建sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过sqlSession操作数据库 // 第一个参数:statement的位置,等于namespace+statement的id // 第二个参数:传入的参数 User user = sqlSession.selectOne("test.findUserById", 16); sqlSession.close(); System.out.println(user); } // 模糊查询(可能是单条也可能是多条) @Test public void testFindUserByName() { // 通过sqlSessionFactory创建sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //selectList代表着返回是list集合 List list = sqlSession.selectList("test.findUserByName", "小明"); sqlSession.close(); System.out.println(list.get(0).getUsername()); } // 添加用户 @Test public void testInsertUser() { // 通过sqlSessionFactory创建sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User(); user.setUsername("小小徐"); user.setAddress("杭州市余杭区未来科技城"); user.setBirthday(new Date()); user.setSex("1"); //insert代表插入 sqlSession.insert("test.insertUser", user); //查看是不需要提交事物的,但是插入和修改是需要提交事物的 sqlSession.commit(); sqlSession.close(); //这里输出的id竟然是0,有哪位大神解释下吗? System.out.println("用户的id=" + user.getId()); } // 根据id删除用户 @Test public void testDeleteUser() { // 通过sqlSessionFactory创建sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // delete代表删除用户 sqlSession.delete("test.deleteUser", 29); sqlSession.commit(); sqlSession.close(); } // 根据id更新用户 @Test public void testUpdateUser() { // 通过sqlSessionFactory创建sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建更新数据对象,要求必须包括 id User user = new User(); user.setId(40); user.setUsername("小小钟"); user.setAddress("杭州余杭区东西大道"); //user.setBirthday(new Date()); user.setSex("1"); //update更新数据 sqlSession.update("test.updateUser", user); sqlSession.commit(); sqlSession.close(); System.out.println("用户的id=" + user.getId()); }}

mybatis与hibernate重要区别

企业开发进行技术选型 ,考虑mybatis与hibernate适用场景。    mybatis:入门简单,程序容易上手开发,节省开发成本 。mybatis需要程序员自己编写sql语句,是一个不完全 的ORM框架,对sql修改和优化非常容易实现 。      mybatis适合开发需求变更频繁的系统,比如:互联网项目。    hibernate:入门门槛高,如果用hibernate写出高性能的程序不容易实现。hibernate不用写sql语句,是一个 ORM框架。      hibernate适合需求固定,对象数据模型稳定,中小型项目,比如:企业OA系统。  总之,企业在技术选型时根据项目实际情况,以降低成本和提高系统 可维护性为出发点进行技术选型。总结  SqlMapConfig.xml    是mybatis全局配置文件,只有一个,名称不固定的,主要mapper.xml,mapper.xml中配置 sql语句  mapper.xml    mapper.xml是以statement为单位进行配置。(把一个sql称为一个statement),satatement中配置 sql语句、parameterType输入参数类型(完成输入映射)、resultType输出结果类型(完成输出映射)。还提供了parameterMap配置输入参数类型(过期了,不推荐使用了),还提供resultMap配置输出结果类型(完成输出映射)  #{}    表示一个占位符,向占位符输入参数,mybatis自动进行java类型和jdbc类型的转换。程序员不需要考虑参数的类型,比如:传入字符串,mybatis最终拼接好的sql就是参数两边加单引号。#{}接收pojo数据,可以使用OGNL解析出pojo的属性值  ${}    表示sql的拼接,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。${}也可以接收pojo数据,可以使用OGNL解析出pojo的属性值    缺点:不能防止sql注入。  selectOne    用于查询单条记录,不能用于查询多条记录,否则异常:      org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4  selectList    用于查询多条记录,可以用于查询单条记录的。

​​​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:开发工具:IDEA类和方法注释模板设置(非常详细)
下一篇:运行时异常和非运行时异常
相关文章

 发表评论

暂时没有评论,来抢沙发吧~