MyBatis介绍:
MyBatis 是一款优秀的持久层框架,其前身是iBatis,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码
和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java
Objects,普通的 Java对象)映射成数据库中的记录。
现在软件开发常用框架:Spring、SpringMVC、MyBatis、Hibernate、struts2
控制层框架(代替传统的Servlet):SpringMVC/struts2
持久层框架(dao层操作,代替传统的):MyBatis/hibernate
整合框架:Spring
SSH:Spring struts2 Hibernate
SSM:Spring SpringMVC MyBatis
源生JDBD的缺点:
1、SQL语句是硬编码,如果需求变更需要修改SQL就要修改java代码,需要重新编译,系统维护不方便;
2、通过preparedStatement向占位符设置参数,存在硬编码(参数位置,参数);
3、遍历查询结果集存在硬编码(列名);
MyBatis的优点:
1、将SQL语句同意配置在文件中,修改SQL不需要java代码;
2、将sql中的占位符及对应的参数类型设置在配置文件中,能够自动输入映射;
1、创建一个Dynamic Web project工程;
2.1 将mybatis-3.4.5.jar复制到WebContent/WEB-INF/lib目录下;
2.2 打开lib文件夹,将此文件夹下的所有的jar包都拷贝复制到WebContent/WEB-INF/lib目录下;
3、下载jJDBC的驱动包mysql-connector-java-5.1.38.jar,也拷贝到WebContent/WEB-INF/lib目录下;
4、创建需要的数据库表,我自己以user(id,username,password)表演示;
6.1 接口:
7.4在主配置文件中映入SQL映射文件(配置映射文件)
8、编写Dao方法,调用SQL映射文件
8.1 通过I/O流加载主配置文件
8.2 创建SessionFactory对象
8.3 创建SQLSession对象
8.4 通过SQLSession对象调用相关的SQL映射执行数据库操作
8.5 提交事务(增删改操作必须提交事务)
MyBatis 是一款优秀的持久层框架,其前身是iBatis,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码
和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java
Objects,普通的 Java对象)映射成数据库中的记录。
现在软件开发常用框架:Spring、SpringMVC、MyBatis、Hibernate、struts2
控制层框架(代替传统的Servlet):SpringMVC/struts2
持久层框架(dao层操作,代替传统的):MyBatis/hibernate
整合框架:Spring
SSH:Spring struts2 Hibernate
SSM:Spring SpringMVC MyBatis
源生JDBD的缺点:
1、SQL语句是硬编码,如果需求变更需要修改SQL就要修改java代码,需要重新编译,系统维护不方便;
2、通过preparedStatement向占位符设置参数,存在硬编码(参数位置,参数);
3、遍历查询结果集存在硬编码(列名);
MyBatis的优点:
1、将SQL语句同意配置在文件中,修改SQL不需要java代码;
2、将sql中的占位符及对应的参数类型设置在配置文件中,能够自动输入映射;
3、自动进行SQL查询结果向java对象映射(输出映射)
1、创建一个Dynamic Web project工程;
2、MyBatis的下载及jar包:https://github.com/mybatis,我自己下载了mybatis-3.4.5.zip,当然各版本几乎没什么差别,建议使用最新版本,具
体情况根据项目需求而定。
解压之后目录结构如下:2.1 将mybatis-3.4.5.jar复制到WebContent/WEB-INF/lib目录下;
2.2 打开lib文件夹,将此文件夹下的所有的jar包都拷贝复制到WebContent/WEB-INF/lib目录下;
3、下载jJDBC的驱动包mysql-connector-java-5.1.38.jar,也拷贝到WebContent/WEB-INF/lib目录下;
4、创建需要的数据库表,我自己以user(id,username,password)表演示;
5、在实体类包domain下定义实体类(包名的命名规则:com.公司域名.项目名.模块名.子模块名...):
package com.***.mybatis.***.domain; /** * <p>ClassName : User</p> * <p>Company : ***</p> * @author *** * @date 2017年11月9日 上午11:01:43 */ public class User { private String id; private String username; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + "]"; } }
6.1 接口:
package com.***.mybatis.***.dao; import java.io.IOException; import com.***.mybatis.***.domain.User; /** * <p>ClassName:UserDao</p> * @功能描述 用户数据持久层接口 * <p>Company:***</p> * @author *** * @date 2017年11月9日 下午3:44:22 */ public interface UserDao { /** * 增加新用户 * @return * @throws IOException */ public int saveAddUser(User user) throws IOException; }
6.2 接口实现类:
import java.io.InputStream; 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 com.***.mybatis.***.dao.UserDao; import com.***.mybatis.***.domain.User; /** * <p>ClassName:UserDaoImpl</p> * @功能描述 用户数据持久层实现类 * <p>Company:***</p> * @author *** * @date 2017年11月10日 上午10:58:15 */ public class UserDaoImpl implements UserDao { /** * 增加新用户 * @param user * @return * @throws IOException */ @Override public int saveAddUser(User user) throws IOException { System.out.println("执行添加用户方法!"); return 0; } }
7、安装MyBatis(重点)
7.1 在src目录下创建MyBatis主配置文件:mybatis-config.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> <!-- 加载数据库配置文件 --> <properties resource="resources/db.properties" /> <environments default="mysql"> <environment id="mysql"> <!-- 以jdbc的方式管理事务 --> <transactionManager type="JDBC" /> <!-- 配置数据源 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/***" /> <property name="username" value="root" /> <property name="password" value="root" /> <!-- <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> --> </dataSource> </environment> </environments> <!-- 配置映射文件 --> <mappers> <mapper resource="com/***/mybatis/***/dao/UserDao.xml" /> </mappers> </configuration>
7.2 在Dao接口的同级别目录中创建SQL映射文件名为 接口名.xml
7.3 在主配置文件mybatis-config.xml中定义MyBatis的运行环境(配置数据源);
<?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就相当于java中的package --> <mapper namespace="user"> <insert id="saveAddUser" parameterType="com.***.mybatis.***.domain.User"> insert into user (username,password) values(#{username},#{password}) </insert> </mapper>
7.4在主配置文件中映入SQL映射文件(配置映射文件)
8、编写Dao方法,调用SQL映射文件
8.1 通过I/O流加载主配置文件
8.2 创建SessionFactory对象
8.3 创建SQLSession对象
8.4 通过SQLSession对象调用相关的SQL映射执行数据库操作
8.5 提交事务(增删改操作必须提交事务)
8.6 关闭SQLSession对象
import java.io.InputStream; 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 com.***.mybatis.***.dao.UserDao; import com.***.mybatis.***.domain.User; /** * <p>ClassName:UserDaoImpl</p> * @功能描述 用户数据持久层实现类 * <p>Company:***</p> * @author *** * @date 2017年11月10日 上午10:58:15 */ public class UserDaoImpl implements UserDao { /** * 增加新用户 * @param user * @return * @throws IOException */ @Override public int saveAddUser(User user) throws IOException { System.out.println("执行添加用户方法!"); // 用流的形式加载mybatis主配置文件 String resource = "resources/mybatis/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 获得SqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 获得SqlSession对象,与数据库会话的对象 SqlSession session = sqlSessionFactory.openSession(); int result = session.insert("user.saveAddUser", user); session.commit(); return result; } }
9、创建测试类:
package com.wolfhome.mybatis.hrz.test; import java.io.IOException; import com.wolfhome.mybatis.hrz.dao.impl.UserDaoImpl; import com.wolfhome.mybatis.hrz.domain.User; /** * <p>ClassName:Test</p> * @功能描述 测试类 * <p>Company:nstr</p> * @author Hrzhi * @date 2017年11月9日 下午4:40:37 */ public class Test { public static void main(String[] args) { UserDaoImpl userDao = new UserDaoImpl(); //添加用户 User user = new User(); user.setUsername("张三"); user.setPassword("123456"); try { int result = userDao.saveAddUser(user); System.out.println("添加成功"+ result + "个新用户"); } catch (IOException e) { e.printStackTrace(); } } }