Mybatis如何理解?
1 resources下的映射文件XXMapper.xml语法:
1 映射文件中XX是指你选择的entity内部创建的实体类
由<mapper namespace="">
此处命名必须跟项目中的某个接口名同名
<select id="" resultType="" parameterType="">
id 命名必须与映射文件中的Sql语句的id一一对应;
增删改查以及模糊查询等
</select>
</mapper>组成
示例包名为:
package cn.smbms
cn.smbms.后面跟dao、entity、mapper、service、servlet、util;
定义一个查询接口 List<User>findUserByName( String name);
resultType:传入实体类的路径,一般运用在查询中,需要返回值的
parameterType: 传入SQL语句的参数类型,传入路径,一般用于增删改
注:
查询一般需要将id和resultType以及parameterType 全部定义出来
增删改不需要resultType 返回数值
整体示例语法:
<mapper namespace="cn.smbms(包名).mapper.UserMapper">
<select id="addUser" resultType="cn.smbms.entity.User" parameterType="java.lang.String">
select * from user where name like concat('%',#{userName},'%')
</select>
</mapper>
2、导入pom.xml
导入mybatis和mysql所需的依赖库
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
3、实体类
以最简单的查询为主:
package cn.kgc.entity;
public class User {
//定义数据库的用户id,用户名,和用户密码
private Integer id;
private String userName;
private String userPassword;
//给定义的数据进行get和set的方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}
4、配置 mybatis-config.xml核心文件
//1、抬头部分导入用中文字符集在线引用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
//2、配置主体文件
<configuration>
//此处建议使用environment环境用development(开发)来定义
<environments default="development">
<environment id="development">
//transactionManager事务管理器用来处理事务
<transactionManager type="JDBC"></transactionManager>
//dataSource数据源用来定义数据来源
<dataSource type="POOLED">
//property 配置数据库中的默认属性
<property name="driver" value="com.mysql.jdbc.Driver"/> //驱动程序
<property name="url" value="jdbc:mysql://localhost:3306/smbms"/> //资源定位器
<property name="username" value="root"/> //用户名
<property name="password" value="ok"/> //密码
</dataSource>
</environment>
</environments>
// 开发人员为了方便开发使用配置引用resources资源包下的对象不需要编写SQL,不需要在以前DAO中增加方法
<mappers>
<mapper resource="cn/kgc/mapper/UserMapper.xml"/>
</mappers>
</configuration>
5、编写 mapper/UserMapper.java 接口方法
package cn.kgc.mapper;
import cn.kgc.entity.User;
import java.util.List;
public interface UserMapper {
//以查询为例
public List<User> findByName(String userName);
}
6、利用工具类方法抽离封装公共部分
package cn.smbms.utils;
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;
public class MyBatisUtil {
private static SqlSessionFactory factory;
static{ //类加载时执行此处
try { //将资源以流的方式获取
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//定义一个工厂模式模型,设置流模式
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
//封装sqlSession
public static SqlSession getSqlSession(){
SqlSession sqlSession=null;
if (factory!=null){
sqlSession = factory.openSession();
}
return sqlSession;
}
}
7、创建测试类进行运行测试
package cn.kgc.test;
import cn.kgc.entity.User;
import cn.kgc.mapper.UserMapper;
import cn.kgc.util.MybatisUtil;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
public class MybatisTest {
@Test
public void findByName(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
List<User> list = sqlSession.getMapper(UserMapper.class).findByName("xxx");
for (User user:list){
System.out.println("id"+user.getId()+"name"+user.getUserName()+"password"+user.getUserPassword());
}
sqlSession.close();
}