MyBatis创建项目(2)是基于MyBatis创建项目(1)的改进版:
1、删除Dao接口的实现类;
--->
2、修改SQL映射文件的namespace属性值为接口的全限定名;
<?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="com.wolfhome.mybatis.hrz.dao.UserDao"> <insert id="saveAddUser" parameterType="com.wolfhome.mybatis.hrz.domain.User"> insert into user (username,password) values(#{username},#{password}) </insert> <delete id="deleteUserById" parameterType="_int"> delete from user where id=#{id} </delete> </mapper>
3、确保接口中的方法名与SQL映射文件中的SQL映射id完全相同;确保接口中方法传递的参数类型和SQL映射的sql标签中的属性中所配置的参数和返回值类型要一模一样;
4、Test类中通过SqlSession对象的getMapper(Class clazz)方法创建接口的动态代理对象,参数为接口的Class;
package com.wolfhome.mybatis.hrz.test; import java.io.IOException; 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.wolfhome.mybatis.hrz.dao.UserDao; import com.wolfhome.mybatis.hrz.domain.User; /** * <p>ClassName:Test</p> * @功能描述 测试类 * <p>Company:wolfhome</p> * @author Hrzhi * @date 2017年11月10日 下午5:42:48 */ public class Test { public static void main(String[] args) throws IOException { // 用流的形式加载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(); // 利用反射机制创建dao实现类,以多态的形式返回给dao接口 UserDao userDao = session.getMapper(UserDao.class); // 添加用户 User user = new User(); user.setUsername("李四"); user.setPassword("123456"); try { int result = userDao.saveAddUser(user); session.commit(); System.out.println("添加成功" + result + "个新用户"); } catch (IOException e) { e.printStackTrace(); } finally { session.close(); } } }
5、将动态代理对象赋值给接口变量,并调用接口中的方法;
6、MyBatis动态SQL:点击“MyBatis动态SQL”查看,其实就是用了<where>、<if>等标签的sql语句。
总结:
1、实现代码简洁,少写了dao层的实现类;
2、dao层接口名和SQL映射文件名必须一样;
3、SQL映射文件中命名空间namespace是接口的“包名.类名”;
4、SQL映射文件中id值必须和接口中的方法名一样;
5、接口中方法所传递的参数必须和SQL映射文件中的参数类型一致。
MyBatis开发步骤总结:
1、导包:mybatis.jar相关jar和数据库驱动包mysql-connector-java.jar;
2、创建实体类;
3、定义Dao接口和接口实现类;
4、安装MyBatis:在src目录下创建MyBatis主配置文件;在Dao接口的同级别目录下创建SQL映射文件;
5、配置主配置文件的运行环境,即数据库连接属性配置;
6、在主配置文件中加入SQL映射文件;
7、编写Dao方法,调用SQL映射文件;
8、创建测试类,调用dao方法。