MyBatis框架
1.MyBatis
myBatis是一个开源的数据持久曾框架。它地内部封装了jdbc访问数据库的操作,支持普通的sql查询,存储过程和高级映射,他的主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,将sql与程序代码分离。
2.ORM
ORM(object relational Mapping)即对象/关系映射,是一种持久化技术。他在对象模型和关系型数据库之间建立对应关系,可以使用API直接操作javaBnean对象就可以实现数据的存储,查询和更改,删除等操作。MyBatis通过简单的xml或者注解进行配置和原始映射,将实体类和sql语句之间建立映射关系,是一种半自动化的ORM实现。
3.MyBtais环境搭建
1)创建maven项目: 右键file--〉project
2)创建Group和ArtifactId
3)settings和repository一般在C盘,可以不用改,加入 archetypeCatalog = internal 可以防止maven慢
4)next--〉finish,就可以完成环境的搭建
4.创建maven项目
1)加入此设置可以防止创建maven项目慢
2)同上步骤可以完成项目的创建
5.创建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"> <!--通过这个配置文件,完成mybatis与数据库的连接--> <configuration> <!-- 引入jdbc.properties--> <properties resource="jdbc.properties"/> <typeAliases> <package name="cn.happy.pojo"></package> </typeAliases> <environments default="development"> <environment id="development"> <!--配置事务管理 采用jdbc--> <transactionManager type="JDBC"></transactionManager> <!--POOLED mybatis的数据原 jndi 基于tomcat的数据原--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <!--<property name="password" value="${password}"/>--> </dataSource> </environment> </environments> <mappers> <mapper resource="cn/happy/dao/UserMapper.xml"/> <mapper resource="cn/happy/dao/RoleMapper.xml"/> </mappers> </configuration>
注:1)configuration:配置文件的根元素节点
2)properties:通过resource属性从外部指定properties属性文件(database.properties),该属性文件描述的数据库连接的相关配置,位置也在/resource目录下
3)enviroment:配置mybatis的一套运行环境,需指定运行环境的id,事务管理,数据源配置等相关信息
4)mappers:作用是告诉mybatis去哪里找到sql映射文件(该文件内容是开发者定义的映射sql语句),整个项目中可以有一个或多个sql映射文件。
5)mapper: mappers的子元素节点,具体指定sql映射文件的路径,其中resources属性的值表述了sql映射文件的路径(资源路径)。
TIP:mybatis-config.xml文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么xml文件就会报错。
6.创建持久化类(pojo)和sql映射文件
1) 持久化类是指其实例状态需要被mybatis持久化到数据库中的类 。
package cn.happy.pojo;
public class Role {
private int id;
private String roleCode;
private String roleName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRoleCode() {
return roleCode;
}
public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
pojo就是java对象,符合javaBean规范的实体类,不需要继承和实现任何特殊的接口或java基类。
2)sql映射文件,完成于pojo的映射,该文件一般命名为类名+Mapper.xml
注:mapper:映射文件的根元素节点,只有一个属性namespace;
namespace:用于区分不同的mapper,全局唯一
select:表示查询的语句,是mybatis最常用的元素之一,常用属性如下:
id属性:该命名空间下的唯一标识符
resultType属性:表示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="cn.happy.dao.RoleMapper"> <insert id="add" parameterType="Role"> INSERT INTO role(roleCode,roleName) VALUES (#{roleCode},#{roleName}) </insert> <update id="update" parameterType="Role"> UPDATE role set roleCode=#{roleCode},roleName=#{roleName} WHERE id=#{id} </update> <delete id="delete" parameterType="Role"> DELETE from role WHERE id=#{id} </delete> </mapper>
7.创建测试类
在测试类中加入junit,创建测试类进行功能侧试。
package cn.happy.test; import cn.happy.dao.RoleMapper; import cn.happy.dao.UserMapper; import cn.happy.pojo.Address; import cn.happy.pojo.Role; import cn.happy.pojo.User; import cn.happy.util.MyBatisUtil; import org.apache.ibatis.session.SqlSession; import org.apache.log4j.Logger; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class RoleDaoTest { private Logger logger = Logger.getLogger(userDaoTest.class); //增加的方法 @Test public void addTest(){ SqlSession sqlSession = null; Role role = new Role(); role.setRoleCode("SALE"); role.setRoleName("销售"); try { sqlSession = MyBatisUtil.createSqlSession(); sqlSession.getMapper(RoleMapper.class).add(role); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } } //修改的方法 @Test public void updateTest() { SqlSession sqlSession = null; Role role = new Role(); role.setId(5); role.setRoleCode("SALE-1"); role.setRoleName("销售-1"); try { sqlSession = MyBatisUtil.createSqlSession(); sqlSession.getMapper(RoleMapper.class).update(role); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally { MyBatisUtil.closeSqlSession(sqlSession); } } //删除的方法 @Test public void deleteTest(){ Role role = new Role(); role.setId(5); SqlSession sqlSession = null; try { sqlSession = MyBatisUtil.createSqlSession(); sqlSession.getMapper(RoleMapper.class).delete(role); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } } //查询的方法 @Test public void getRoleList(){ SqlSession sqlSession = null; List<Role> list = new ArrayList<Role>(); Role role = new Role(); role.setRoleCode("A"); role.setRoleName("财"); try { sqlSession = MyBatisUtil.createSqlSession(); list = sqlSession.getMapper(RoleMapper.class).getRoleList(role); } catch (Exception e) { e.printStackTrace(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } for (Role _role : list){ logger.debug("roleName---------->"+_role.getRoleName()); } } /* //根据roleId获取用户信息 @Test public void getUserListByRoleIdTest(){ SqlSession sqlSession = null; Role role = new Role(); role.setId(1); List<User> userList = new ArrayList<User>(); try { sqlSession = MyBatisUtil.createSqlSession(); userList = sqlSession.getMapper(UserMapper.class).getUserListByRoleId(role); for (User user : userList) { logger.debug("user--------->"+user.getUserName()); logger.debug("user--------->"+user.getRole().getRoleName()); } } catch (Exception e) { e.printStackTrace(); } }*/ @Test public void getAddressListByUserIdTest(){ SqlSession sqlSession = null; User user = new User(); user.setId(1); try { sqlSession = MyBatisUtil.createSqlSession(); user = sqlSession.getMapper(UserMapper.class).getAddressListByUserId(user); List<Address> addressList = user.getAddressList(); for(Address address : addressList){ logger.debug("address------------>"+address.getAddressContent()); } } catch (Exception e) { e.printStackTrace(); } } @Test public void serchUserListTest(){ SqlSession sqlSession = null; User user = new User(); user.setRoleId(1); user.setUserCode(""); user.setUserName(""); List<User> userList = new ArrayList<User>(); try { sqlSession = MyBatisUtil.createSqlSession(); userList = sqlSession.getMapper(UserMapper.class).serchUserList(user); for(User user1 : userList){ logger.debug("address------------>"+user1.getUserCode()); } } catch (Exception e) { e.printStackTrace(); } } }