一、MyBatis简介
MyBatis是一个半自动的ORM框架,把编写SQL语句交给程序员,优化SQL语句。
Hibernate是一个全自动的ORM框架,从Javabean---数据库数据记录,自动生成SQL语句,不利于SQL的优化。
在GitHub下载mybatis所需版本(jar包,官方文档)。https://github.com/mybatis/mybatis-3/releases
二、Hello World
编写一个简单的MyBatis程序。
1.环境搭建
在idea中创建一个java工程
在项目中导入所需jar包:
步骤:File-->Project Structure-->Modules-->Dependencies中手动导入jar包,点击+号,选择JARs or directories...
2.代码
1)建JavaBean:Employee.java
package com.atguigu.mybatis.bean; /** * @Author 谢军帅 * @Date2019/11/10 17:06 * @Description */ public class Employee { private Integer id; private String lastName; private String email; private String gender; }
2)建配置conf文件:
然后右键Mark Directory as --> Sources Root(类路径),下边放配置文件
a. log4j.xml:打印日志。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="UTF-8" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) " /> </layout> </appender> <logger name="java.sql"> <level value="debug" /> </logger> <logger name="org.apache.ibatis"> <level value="info" /> </logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> </root> </log4j:configuration>
b. 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_sgg"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 将我们写好的sql 映射文件一定要注册到全局配置为中--> <mappers> <mapper resource="EmployeeMapper.xml"/> </mappers> </configuration>
c. EmployeeMapper.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.atguigu.mybatis.EmployeeMapper"> <!-- namespace:名称空间 id:唯一标识 resultType:返回值类型 #{id}:从传递过来的参数中取出id值 --> <select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee"> select id,last_name lastName,email,gender from tbl_employee where id = #{id} </select> </mapper>
3)测试Test
package com.atguigu.mybatis.test; import com.atguigu.mybatis.bean.Employee; 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 java.io.IOException; import java.io.InputStream; /** * @Author 谢军帅 * @Date2019/11/10 17:46 * @Description */ public class MyBatisTest { /* * 1、根据全局配置文件(全局配置文件)创建一个SqlSessionFactory对象 * 有数据源一些运行环境的信息 * 2、sql映射文件;配置了每一个SQL,以及SQL的封装规则等。 * 3、将SQL映射文件注册在全局配置文件中 * 4、写代码: * 1)根据全局配置文件得到SqlSessionFactory; * 2)使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查 * 一次SqlSession就是代表和数据库的一次会话,用完关闭。 * 3)使用sql的唯一标识来告诉Mybatis执行哪个SQL。 * */ public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2、获取SqlSession实例,能直接执行已经映射的sql语句 //sql的唯一标识 //执行SQL要用的参数 SqlSession sqlSession = sqlSessionFactory.openSession(); try { Employee employee = sqlSession.selectOne("com.atguigu.mybatis.EmployeeMapper.selectEmp",1); System.out.println(employee); System.out.println(employee.getLastName()); }finally { sqlSession.close(); } } }
注意:当JavaBean的字段和数据库表中的字段不一样时,MyBatis映射不了,这里在查询数据库时可以使用别名。