(四)mybatis之mybatis初了解
前言:终于到mybatis啦!
Mybatis
前文有提到,Hibernate采用的是全表映射的方式,而这方式恰恰使得性能变得较差(https://www.cnblogs.com/NYfor2018/p/9092810.html )。为了解决Hibernate的不足,一个半自动映射的框架Mybaits应运而生,之所以称之为半自动,是因为它需要手工匹配提供POJO、SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系即可。
在Mybatis中,需要自己编写SQL,虽然比Hibernate配置多,但是Mybatis可以配置动态SQL,这就解决了上文提到的,在Hibernate中根据表明动态修改的问题。同时也可以优化SQL,通过配置决定你的SQL映射规则,也能支持存储过程,所以对于以下复杂的和需要优化性能SQL的查询会更加方便。而且,在注意一些规则的基础上,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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="userName" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <mappers> <mapper resource="com\entity\user.xml"/> <!-- 这里是映射实体类的映射 --> </mappers> </configuration>
这个就是Mybatis的基础配置文件。
② 这个xml文件,主要是给出SQL。
<?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="com.mapper.UserMapper"> <select id="getUser" parameterType="id" resultType="com.entity.User"> select id,userName from user_info where id=#{id} <!-- select标签中,parameterType表示传入作为查找条件的参数是id,而且返回的数据的格式是User --> <!-- 标签中间的是SQL语句,#{id}是待传参数 --> </select> </mapper>
这里使用的SQL列名和POJO的属性名保持一致,因为我们给出了SQL但是并没有给出映射规则,而Mybatis在这个时候会自动提供映射规则,所以可以省去配置映射规则的工作。
③ 再者,我们还需要一个接口。注意这仅仅是一个接口,无需实现类。
public interface UserMapper{ public User getUser(int id); }
这里的接口是用于Mybatis映射并操作数据库用的。对应的是②中mapper标签的namespace变量。
④ 为了使用Mybati,我们还需要建立SqlSessionFactory。
public class MyBatisUtil{ private static SqlSessionFactory sqlSessionFactory = null; public static SqlSessionFactory getSqlSessionFactory(){ InputStream inputStream = null; if(sqlSessionFactory==null){ try{ String resource = "mybatis_config.xml"; //引入数据库配置资源 sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource)); //用数据库配置的资源作为依据,创建SqlSessionFactory }catch(Exception ex){ System.err.println(ex.getMessage()); ex.printStackTrack(); } } return sqlSessionFactory; } }
应用Mybatis之前的,引用数据库的配置文件,以达到连接到数据库,并且可以使用Mybatis来操作数据。
⑤ 用Mybatis实现JDBC的功能操作数据的功能(可参考JDBC篇的例子:https://www.cnblogs.com/NYfor2018/p/9088254.html )
public class MyBatisExample{ public static void main(String[] args){ SqlSession sqlSession = null; try{ sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(); //通过MyBatisUtil配置好的SessionFactory生产Session UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getUser(1); System.err.println("userName =>"+user.getUserName()); }finally{ sqlSession.close(); } } }
这样便完成了Mybatis的代码编写工作,SQL和映射规则都在XML里面进行了分离,而Mybatis更为灵活。既可以自由书写SQL,定义映射规则。此外,Mybatis提供接口编程的映射只需要一个接口和映射文件便可以运行。
最新文章
- 【Android】用HandlerThread模拟AsyncTask功能(ThreadTask)
- 在 SQL Server 数据库的 WHERE 语句中使用子查询
- Java 进程占用 VIRT 虚拟内存超高的问题研究
- 【poi】用POI新建一个xlsx文件【或者说将数据存入到xlsx中】/【将数据从xlsx中获取到项目中】
- 监听UITextFiled输入文字长度的变化
- CF 55D - Beautiful numbers(数位DP)
- systemtap 技巧系列 +GDB
- Mysql 进阶操作
- angularjs中类似textarea的换行、空格处理
- docker环境 快速使用elasticsearch-head插件
- 乙方渗透测试之Fuzz爆破
- js判断是否在微信中打开
- WcPro项目(WordCount优化)
- Intro to Airplane Physics in Unity 3D – 2017 and 2018
- 洛谷P2512 糖果传递
- Confluence 6 白名单允许进入和禁用
- 浅谈CSS和JQuery实现鼠标悬浮图片放大效果
- Android开发代码规范总结
- .net mvc 列名 &#39;Discriminator&#39; 无效
- 模拟的confirm