Mybatis----基础
Posted 小名的同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis----基础相关的知识,希望对你有一定的参考价值。
概述:
Hibernate
标准的ORM框架。Hibernate 框架是提供了全面的数据库封装机制的 “全自动” ORM,即实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。
MyBatis
1、持久层框架
2、相对于Hibernate,MyBatis 只能算作是 “半自动” ORM。其着力点,是在 POJO 类与 SQL 语句之间的映射关系。也就是说,MyBatis 并不会为程序员自动生成 SQL 语句。具体的 SQL 需要程序员自己编写,然后通过 SQL 语句映射文件,将 SQL 所需的参数,以及返回的结果字段映射到指定 POJO。因此,MyBatis 成为了“全自动”ORM 的一种有益补充。
3、MyBatis 可以prepareStatement (参考jdbc)中的输入参数自动进行输入映射,并将查询结果集自动映射成java对象。
MyBatis框架
配置SqlMapConfig.xml(是Mybatis的全局配置文件。配置了数据源,事务等运行环境)
配置Mapper.xml(映射文件)
如何操作数据库?
首先通过配置文件创建 SqlsessionFactory(会话工厂)---->创建SqlSession(会话工厂创建SqlSession(接口):作用:发出sql语句)----->Executor(SqlSession内部通过Executor(接口:实现有基本执行器,缓存执行器)来操作数据库)---->Mapped Statement(Executor需要MappedStatuement底层封装对象:封装sql语句,输入参数(java简单类型,hashmap,pojo自定义),输出类型(映射java对象))
SqlSession:线程不安全的(实现类中含有数据域属性,又是单例模式),应用场景:方法体内,定义局部变量(每一个线程在同一个方法体类都有不同的内存空间,不共用)
Mybatis框架简单使用
mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,事务控制由mybatis--> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理(和spring整合和使用第三方连接池整合)--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/javas1"></property> <property name="username" value="root"></property> <property name="password" value="123456"></property> </dataSource> </environment> </environments> <!-- 加载映射文件--> <mappers> <mapper resource="Mapper/userMapper.xml"/> </mappers> </configuration>
mapper/userMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="test"><!--还没有使用Mapper代理(namespace的名字就是Dao接口的名字),所以这个命名空间名字我们任意--> <select id="selectById" resultType="com.zy.pojo.User" parameterType="int"> //id:如果使用mapper代理,id就是dao方法的名字;resultType需要全限定类名(如果没有配置实体类扫描配置的话) * FROM t_user WHERE id = #{id} ; </select> </mapper>
测试
public class FisrtMybatis { public static void main(String[] args) throws IOException { // mybatis配置文件 String resource = "mybatis.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); //创建会话工厂,传入mybatis配置文件的信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 通过工厂得到SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过SqlSession操作数据库 // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数 // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象 // selectOne查询出一条记录 //--------------------------------- User user1 = new User(); user1.setUsername("xx11"); user1.setPassword("xx11"); sqlSession.insert("test.insetone", user1); System.out.println(user1.getId()); //增删改需要提交 sqlSession.commit(); //--------------------------------- //--------------------------------- //Dao开发中,我们可以Mapper代理方式,不用写实现类了(原本dao实现类主要就是写:sqlSession.insert("test.insetone", user1);) // UserDao mapper = sqlSession.getMapper(UserDao.class); // User user = mapper.selectById(3); // System.out.println(user); //--------------------------------- // 释放资源 sqlSession.close(); } }
Mybatis和mysql的注意事项
mybatis 中的if<test=\'\'1==1">是双等号
mysql中的语法是单等号,mybatis中使用mysql的语法也是单等号
mybatis使用if<test=\'\'">,注意最好加上给字段加上@Param
以上是关于Mybatis----基础的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper