一.什么是Mybatis?
iBatis 封装了绝大多数的 JDBC 样板代码,使得开发者只需关注 SQL 本身,而不需要花费精力去处理例如注册驱动,创建 Connection,以及确保关闭 Connection 这样繁杂的代码。
其次,iBatis 可以算是在所有主流的持久层框架中学习成本最低,最容易上手和掌握的框架。虽说其他持久层框架也号称门槛低,容易上手,但是等到你真正使用时会发现,要想掌握并用好它是一件非常困难的事。在工作中我需要经常参与面试,我曾听到过很多位应聘者描述,他们所在的项目在技术选型时选择 Hibernate,后来发现难以驾驭,不得不将代码用 JDBC 或者 iBatis 改写。
iBatis 自从在 Apache 软件基金会网站上发布至今,和他的明星兄弟们(Http Server,Tomcat,Struts,Maven,Ant 等等)一起接受者万千 Java 开发者的敬仰。然而在10年六月中旬,几乎是发布 3.0 版本的同时,iBatis 主页上的一则 “Apache iBATIS has been retired” 的声明在社区引起了一阵不小的波澜。在 Apache 寄居六年之后,iBatis 将代码托管到 Google Code。在声明中给出的主要理由是,和 Apache 相比,Google Code 更有利于开发者的协同工作,也更能适应快速发布。于此同时,iBatis 更名为 MyBatis。
MyBatis是一款优秀的持久层框架,它支持定制化sql存储过程以及高级映射,Mybatis避免了几乎所有的jdbc代码和手动设置参数以及获取结果集。Mybatis可以使用简单的xml或注解来配置和映射原生信息,将接口和java的Pojos(Plain old java objects 普通的 java对象)映射成数据库中的记录
二.第一个程序
-
创建java项目
2.导入mybatis的依赖包和mysql连接包
3.引入log4j日志文件,新建一个xml配置文件。默认名称为sqlMapConfig.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整合就不需要配置了,完全交给了spring --> <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="1234" /> </dataSource> </environment> </environments> <!-- 管理每一张表的映射文件 resource:引入映射文件 用/不用. --> <mappers> <mapper resource="com/wl/mapper/PersonTestMapper.xml" /> </mappers> </configuration> |
4.在数据库中新建一张表
5.新建映射文件
<?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"> <!-- namespace:映射文件的命名空间 ,规范是映射文件的包的全路径 --> <mapper namespace="com.wl.mapper.PersonTestMapper">
<!-- id:sql唯一标识 parameterType:传递给sql的参数的数据类型 resultType:返回数据结果的类型 #{id}:用于接收参数的语法{}中的内容,如果是接收一个参数内容任意, #{}:是使用预编译的方式生成sql,防止sql注入 --> <select id="selectPsersonById" parameterType="java.lang.Integer" resultType="com.wl.model.Person"> select * from person_test where id= #{id} </select>
</mapper> 注意:com.wl.model.Person是需要我们自己建model,需要根据表中字段名对应提供setget方法 |
6.新建model
7.测试是否成功
public class MyBatisTest {
SqlSessionFactory sessionFactory; @Test public void test() throws IOException { InputStream inputStream=Resources.getResourceAsStream("sqlMapConfig.xml"); sessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //创建sqlSession SqlSession session=sessionFactory.openSession(); try { //selectOne:第一个参数要执行的sql,命名空间.sql的id //第二个参数是要穿递给sql的实际参数 com.wl.model1.Person selectOne = session.selectOne("com.wl.mapper.PersonTestMapper2.selectPserson", 1); System.out.println(selectOne); } catch (Exception e) { e.printStackTrace(); } session.close(); }
} |