1: ORM概念
ORM(OBJECT-RELATIONSHIP MAPPING) 即对象关系映射,他只是一种思想,他的实质是将数据库中的数据用对象的形式表现出来。
JPA(JAVA PERSISITENCE API)它是javaee关于orm思想的标准接口,仅仅是一套规范和接口,不是实现
hibernate就是实现JPA规范和接口的ORM组件(基于对象开发)
Mybatis是一个半ORM组件(基于sql开发)
2:Mybatis是什么
Mybatis是一个实现了java数据持久化的开源框架,简单的来说,他就是一个jdbc的封装组件
Mybatis的前身是ibatis,ibatis创建于2002年,最初是apache下面的一个开源项目
2010迁移到gogole code ,并且更名为Mybatis
当前最新版本是 3.4.x
本次主讲版本3.3.1
官网地址 :https://github.com/mybatis/mybatis-3/releases
3:mybatis有什么优势
消除了大量的jdbc冗余代码(不用手动开关连接,创建statement,结果映射)
* 简单易学,容易上手(基于sql的编程思想,提供了简单易用的api与数据库进行交互)
* 很好的与各种数据库兼容(开发人员不需要考虑数据库的差异性)
* 提供了第三方插件很好的支持(分页插件/逆向工程/缓存组件)
* 提供与spring很好的集成支持
4:Mybatis开发环境搭建
- 新建java项目,注意项目编码
- 引入jar包 mybatis3.3.1.jar包
- 引入mybatis依赖的jar包
asm-3.3.jar
cglib-2.2.jar
commons-logging-1.1.1.jar
javassist-3.15.0-GA.jar
log4j-1.2.17.jar - 引入junit的包
hamcrest-core-1.3.jar
junit-4.11.jar - 引入数据库的驱动包
mysql-connector-java-5.0.8-bin.jar
ojdbc14.jar - 引入jar包到项目中
5: Mybatis的第一个Demo实战
新建一个表 以及对应的实体类 entity包下面的User.java
CREATE TABLE `m_user` (
`USER_ID` int(32) NOT NULL AUTO_INCREMENT COMMENT '编号',
`USER_NAME` varchar(32) NOT NULL,
`LOGIN_NAME` varchar(100) NOT NULL COMMENT '登录名',
`PASSWORD` varchar(32) DEFAULT NULL,
`DEPT_ID` int(32) DEFAULT NULL,
`BIRTHDAY` datetime DEFAULT NULL COMMENT '创建时间',
`TV_UPDATE` datetime DEFAULT NULL COMMENT '最后登陆时间',
PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='用户表';
*引入mybatis的主配置文件
*详见 mybatis-config.xml
*引入对象映射文件 (我们在这个配置文件里面编写增删改查语句)
*编写增删改查 详见userMapper.xml
*测试
*详见MybatisFirstDemoTest.java
6:在正式的开发环境中用Mybatis进行开发有两种方式
*原始的接口和实现类的方式
*缺点:重复代码太多,sqlSession的操作
*statement的id硬编码将来影响维护
*基于mapper代理的开发方式(重点)
import java.sql.Timestamp;
/**
* 跟数据库表M_USER表对应的实体类
* @author Administrator
*
*/
public class User implements java.io.Serializable {
private static final long serialVersionUID = 7195902105451305867L;
private Long userId;
private String userName;
private String loginName;
private String password;
private Long deptId;
private Timestamp birthday;
private Timestamp tvUpdate;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public Timestamp getBirthday() {
return birthday;
}
public void setBirthday(Timestamp birthday) {
this.birthday = birthday;
}
public Timestamp getTvUpdate() {
return tvUpdate;
}
public void setTvUpdate(Timestamp tvUpdate) {
this.tvUpdate = tvUpdate;
}
@Override
public String toString() {
return "User [userId=" + userId + ", userName=" + userName + ", loginName=" + loginName + ", password="
+ password + ", deptId=" + deptId + ", birthday=" + birthday + ", tvUpdate=" + tvUpdate + "]";
}
<?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>
<!--默认引用哪个数据库环境 -->
<environments default="defaultEnv">
<environment id="defaultEnv">
<!--事务管理方式 -->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接四要素 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 加入所有的sql映射文件 -->
<mappers>
<mapper resource="userMapper.xml"/>
</mappers>
</configuration>
import java.util.List;
import com.tz.mybatis.sysmanage.entity.User;
/**
* 定义用户增删改查dao接口
* @author Administrator
*
*/
public interface IUserDao {
/**
* 根据用户id获取用户对象信息
* @param userId
* @return
*/
public User getUserById(Long userId);
/**
* 查询所有用户对象
* @return
*/
public List<User> getUserList();
/**
* 增加用户对象
* @param user
*/
public void addUser(User user);
/**
* 删除用户对象
* @param user
*/
public void delUser(User user);
/**
* 修改用户对象
* @param user
*/
public void updateUser(User user);
}
<?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 = "user">
<!--
1: id:表示一个sql句柄(相当于在jdbc的statement对象)
2: paremeterType :输入参数的类型 ,在sql语句中,通过占位符#{}来接收此参数
3:resultType: sql操作返回的结果类型
-->
<select id = "getUserById" parameterType = "java.lang.Long"
resultType = "com.tz.mybatis.sysmanage.entity.User" >
SELECT USER_ID USERID,USER_NAME USERNAME,LOGIN_NAME LOGINNAME,
BIRTHDAY,TV_UPDATE TVUPDATE
FROM M_USER WHERE USER_ID = #{ID}
</select>
<!--查询所有用户信息 -->
<select id = "getUserList" resultType="com.tz.mybatis.sysmanage.entity.User">
SELECT USER_ID USERID,USER_NAME USERNAME,LOGIN_NAME LOGINNAME,
BIRTHDAY,TV_UPDATE TVUPDATE FROM M_USER
</select>
<!--增加用户记录 -->
<insert id = "addUser" parameterType= "com.tz.mybatis.sysmanage.entity.User">
INSERT INTO M_USER(USER_NAME,LOGIN_NAME,BIRTHDAY,TV_UPDATE)
VALUES(#{userName},#{loginName},#{birthday},#{tvUpdate})
</insert>
<!--删除用户 -->
<delete id = "delUser" parameterType = "java.lang.Long">
DELETE FROM M_USER WHERE USER_ID = #{ID}
</delete>
<!--修改用户 -->
<update id = "updateUser" parameterType= "com.tz.mybatis.sysmanage.entity.User">
UPDATE M_USER SET
USER_NAME = #{userName},
LOGIN_NAME = #{loginName},
BIRTHDAY = #{birthday}
WHERE USER_ID = #{userId}
</update>
</mapper>
import java.sql.Timestamp;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.tz.mybatis.sysmanage.dao.IUserDao;
import com.tz.mybatis.sysmanage.entity.User;
public class UserDaoImpl implements IUserDao{
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User getUserById(Long userId) {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("user.getUserById", 1l);
sqlSession.close();
return user;
}
@Override
public List<User> getUserList() {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList= sqlSession.selectList("user.getUserList");
sqlSession.close();
return userList;
}
@Override
public void addUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int rows = sqlSession.insert("user.addUser", user);
System.out.println("受影响的行:"+rows);
sqlSession.commit();
sqlSession.close();
}
@Override
public void delUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int rows = sqlSession.delete("user.delUser", user.getUserId());
System.out.println("受影响的行:"+rows);
sqlSession.commit();
sqlSession.close();
}
@Override
public void updateUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int rows = sqlSession.update("user.updateUser", user);
System.out.println("受影响的行:"+rows);
sqlSession.commit();
sqlSession.close();
}
}
网友评论