今天我们一起来学习一下Mybatis的另一种创建方式:mapper接口的创建方法
这里就不再写导包的步骤了
第一步:创建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>
<typeAliases>
<typeAlias type="com.zmz.pojo.User" alias="user"></typeAlias>
</typeAliases>
<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/demo"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--
连锁上要查找的语句包
-->
<mappers>
<mapper resource="com/zmz/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
这里说一下typeAliases 这个标签,这个标签是创建bean的别名,以后不用写com.XXX.XXX.类名,可是直接写类名type指的是报的名称和路径,alias是别名
第二步:创建mapper的接口层
package com.zmz.mapper;
import com.zmz.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
/**
* 查询所有
*/
List<User> getUser();
/**
* 添加操作
*/
int addrUser(User user);
/**
* 修改操作
*/
int updateUser(Map map);
/**
* 删除操作
*/
int deleteUser(int uid);
}
第三步创建mapper 的xml文件
<?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.zmz.mapper.UserMapper">
<!--
查询所有
-->
<select id="getUser" resultType="user">
select * from t_user
</select>
<!--
添加操作
-->
<insert id="addUser" parameterType="user">
insert into t_user (#{uid},#{name},#{addr})
</insert>
<!--
修改操作
-->
<update id="updateUser" parameterType="java.util.Map">
update t_user set name=#{name} where uid=#{uid}
</update>
<!--
删除操作
-->
<delete id="deleteUser" parameterType="int">
delete from t_user where uid=#{uid}
</delete>
</mapper>
这里有注意的地方id的值为mapper接口中的方法名称要对应
mapper 中的namespace要是mapper接口的路径
以前写全路径的地方现在我们可以使用别名来写
同时有的人喜欢在两个的参数的时候使用arg0和arg1或是parme1和parme2,这里可用map集合来代替,原因就是有的时候我们可能会填错地方所以可以使用map来代替
第三步:进行使用
这里我写了一个工具类,因为你会发现,在写Mybatis的时候会有很多重发的地方
工具类:
package com.zmz.util;
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;
public class mybatis {
private static SqlSessionFactory sqlSessionFactory = null;
private static SqlSession sqlSession = null;
private static String resource = "mybatis.xml";
public static SqlSession getSqlSession (){
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
public static void cloesAll(SqlSession sqlSession){
if(sqlSession != null){
sqlSession.commit();
sqlSession.close();
}
}
}
测试代码:
package com.zmz.mapper;
import com.zmz.entity.User;
import com.zmz.util.mybatis;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.*;
public class UserMapperTest {
@Test
public void testUserMapper(){
SqlSession sqlSession = mybatis.getSqlSession();
List<User> user = sqlSession.selectList("com.zmz.mapper.UserMapper.getUser");
System.out.println(user);
mybatis.cloesAll(sqlSession);
}
}
这里就做一个测试吧,其他的都和第一个使用的方法相同
作者也是个Java小白,有什么不对的地方还希望大家一起指出,共同进步,谢谢