找回密码
 立即注册
首页 业界区 业界 MyBatis-mybatis入门与增删改查

MyBatis-mybatis入门与增删改查

揭荸 前天 15:05
了解Mybatis

Mybatis是一个持久层框架,半自动化ORM(Hibernate属于全自动化ORM)。
Mybatis的特点:

  • 支持定制化sql、存储过程、基本映射以及高级映射
  • 避免了几乎所有的JDBC代码中手动设置参数以及获取结果集
  • 支持XML开发,也支持注解式开发
  • 将接口和Java的pojo映射成数据库中的记录
  • 体积小,易上手
  • 完全做到sql解耦
  • 提供了基本映射标签和高级映射标签
  • 提供XML标签、支持动态sql
Mybatis入门程序


  • 引入依赖
    1.                     org.mybatis            mybatis            3.5.14                            mysql            mysql-connector-java            8.0.30        
    复制代码
  • 从XML中构建SqlSessionFactory
    SqlSessionFactory是mybatis中一个重要的对象。
    SqlSessionFactory对象的创建需要xml
    编写mybatis-config.xml文件(mybatis的核心配置文件)
    文件不是必须叫mybatis-config.xml,可以采用其他名字
    文件存放路径不是固定的,一般放在类的根路径下,一般放在resources文件夹下
    mybatis中有两个主要的配置文件:

    • mybatis-config.xml是核心配置文件,主要配置连接数据库的信息
      1.                                                                                                                                                    
      复制代码
    • xxxxMapper.xml是用来编写SQL的配置文件
      1.             INSERT INTO t_car (id, car_num, brand,guide_price,produce_time,car_type)        VALUES (null, '1003', '丰田霸道',30.0,'2000-10-11','燃油车')   
      复制代码
    在mybatis当中,负责执行sql语句的那个对象叫做SqlSession。
    SqlSession是专门执行sql语句的,是一个Java程序和数据库之间的一次会话。
    要想获取SqlSession对象,需要先获取SqlSessionFactory对象,通过SqlSessionFactory来创建SqlSession对象。
    怎么获取SqlSessionFactory对象?
    ​      需要先获取SqlSessionFactoryBuilder对象。
    ​      通过SqlSessionFactoryBuilder对象的build方法来获取SqlSessionFactory对象。
    所以mybatis的核心对象包括:

    • SqlSessionFactoryBuilder
    • SqlSessionFactory
    • SqlSession
    SqlSessionFactoryBuilder--》SqlSessionFactory--》SqlSession
    编写测试程序:
    1. public class MyBatisTes {        public static void main(String[] args) throws IOException {            // 获取 SqlSessionFactoryBuilder 对象            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();            // 获取 SqlSessionFactory 对象            // Resources.getResourceAsStream默认从类路径下加载资源文件            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");            // 一般情况下,一个数据库对应一个SqlSessionFactory对象            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);            // 获取 SqlSession 对象            SqlSession sqlSession = sqlSessionFactory.openSession();            int insertCar = sqlSession.insert("insertCar");            System.out.println("插入了" + insertCar + "条数据");            sqlSession.commit();        }}
    复制代码
mybatis的事务管理机制


  • 在mybatis-config.xml文件中,可以通过以下配置进行mybatis的事务管理
    ​     
    type属性值包括JDBC和MANAGED
    在mybatis中提供了2中事务管理机制

    • jdbc事务管理器:mybatis框架自己管理事务,自己采用原生的jdbc代码去管理事务
      conn.setAutoCommit(false); // 开启事务
      。。。。业务处理。。。。
      conn.commit();// 手动提交事务
      如果设置了自动提交(sqlSessionFactory.openSession(true);)。那么就没有开启事务,这是不推荐的
      如果没有开启事务,那么就会自动提交
    • MANAGED事务管理器:mybatis不负责事务管理,事务管理交给其他容器来负责,例如Spring

mybatis程序完善版:
  1. public static void main(String[] args) {    SqlSession sqlSession = null;    try {        // 获取 SqlSessionFactoryBuilder 对象        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();        // 获取 SqlSessionFactory 对象        // Resources.getResourceAsStream默认从类路径下加载资源文件        InputStream  resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);        // 获取 SqlSession 对象,底层会开启事务        sqlSession = sqlSessionFactory.openSession();        int insertUser = sqlSession.insert("insertCar");        System.out.println("插入了" + insertUser + "条数据");        sqlSession.commit();    } catch (IOException e) {        if (sqlSession != null) {            sqlSession.rollback();        }        throw new RuntimeException(e);    }finally {        if (sqlSession != null) {            sqlSession.close();        }    }}
复制代码
mybatis开启日志

在mybatis-config.xml中配置如下:
  1.          
复制代码
集成logback日志框架

logback实现了slf4j标准。

  • 引入logback依赖
  1.     ch.qos.logback    logback-classic    1.4.5
复制代码

  • 引入logback的xml配置文件
配置文件名字必须叫做logback.xml或者logback-test.xml,不能是其他名字。
配置文件必须放在类的根路径下,不能是其他位置。
内容如下:
  1.                         %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n                                                  
复制代码
MyBatis工具类
  1. public class SqlSessionUtil {    // 构造方法私有化,防止外部创建实例    private SqlSessionUtil(){}    private static SqlSessionFactory sqlSessionFactory;    // 类加载时执行,初始化 SqlSessionFactory    static {        try {            sqlSessionFactory =new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));        } catch (Exception e) {            throw new RuntimeException("初始化 SqlSessionFactory 失败", e);        }    }    // 提供一个公共的静态方法,获取 SqlSession 对象    public static SqlSession openSqlSession(){        return sqlSessionFactory.openSession();    }}
复制代码
mybatis中增删改查

新增

在mybatis中使用#{}来代替jdbc当中?占位符
  1. @Testpublic void TestInsertCar() {    SqlSession sqlSession = SqlSessionUtil.openSqlSession();    Map map = new HashMap();    map.put("k1", "1111");    map.put("k2", "比亚迪汉");    map.put("k3", 10.0);    map.put("k4", "2024-06-01");    map.put("k5", "新能源");    sqlSession.insert("insertCar", map);    sqlSession.commit();    sqlSession.close();}
复制代码
  1.     INSERT INTO t_car (id, car_num, brand,guide_price,produce_time,car_type)    VALUES (null, #{k1}, #{k2},#{k3},#{k4},#{k5})
复制代码
使用pojo类传值
  1. @Testpublic void TestInsertCarByPojo() {    SqlSession sqlSession = SqlSessionUtil.openSqlSession();    Car car = new Car(null, "3333", "比亚迪秦", 30.0,"2020-10-11","新能源");    sqlSession.insert("insertCar", car);    sqlSession.commit();    sqlSession.close();}
复制代码
  1.     INSERT INTO t_car (id, car_num, brand,guide_price,produce_time,car_type)    VALUES (null, #{carNum}, #{brand},#{guidePrice},#{produceTime},#{carType})
复制代码
#{carNum}中的carNum实际上是pojo类中的get方法getCarNum() 的方法名去掉get,然后首字母小写的字符串。不是属性名
删除
  1. @Testpublic void testDeleteCarById() {    SqlSession sqlSession = SqlSessionUtil.openSqlSession();    sqlSession.delete("deleteCarById", 1);    sqlSession.commit();    sqlSession.close();}
复制代码
  1.     DELETE FROM t_car WHERE id = #{id}
复制代码
如果占位符只有一个。那么#{}里面可以随意写,最好见名知意
更新
  1. @Testpublic void testUpdateCarById() {    SqlSession sqlSession = SqlSessionUtil.openSqlSession();    Car car = new Car(2L, "3333", "比亚迪秦Pro", 30.0, "2020-10-11", "新能源");    sqlSession.update("updateCarById", car);    sqlSession.commit();    sqlSession.close();}
复制代码
  1.     UPDATE t_car SET car_num = #{carNum}, brand = #{brand},guide_price = #{guidePrice},produce_time = #{produceTime},car_type = #{carType} WHERE id = #{id}
复制代码
查一个
  1. @Testpublic void testSelectCarById() {    SqlSession sqlSession = SqlSessionUtil.openSqlSession();    // mybatis底层执行select后,会返回一个结果集对象:ResultSet    // jdbc中叫做ResultSet,在mybatis中叫做ResultMap    Car car = sqlSession.selectOne("selectCarById", 2);    System.out.println(car);    sqlSession.close();}
复制代码
  1.             SELECT id, car_num AS carNum, brand, guide_price AS guidePrice, produce_time AS produceTime, car_type AS carType        FROM t_car        WHERE id = #{id}   
复制代码
查所有
  1. @Testpublic void testSelectAllCar() {    SqlSession sqlSession = SqlSessionUtil.openSqlSession();    // mybatis底层执行select后,会返回一个结果集对象:ResultSet    // jdbc中叫做ResultSet,在mybatis中叫做ResultMap    List cars = sqlSession.selectList("selectAllCar");    for (Car car : cars) {        System.out.println(car);    }    sqlSession.close();}
复制代码
  1.     SELECT id, car_num AS carNum, brand, guide_price AS guidePrice, produce_time AS produceTime, car_type AS carType    FROM t_car
复制代码
关于sql Mapper中的namespace

标签中的namespace 用来指定命名空间。用来防止id重复。
在Java程序中的写法(.):
List cars = sqlSession.selectList("carMapper.selectAllCar");

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册