hibernate 是一个全表映射的框架,开发人员只需要定义好持久化对象及相对应的映射文件,并且通过hibernate官方提供的方法就可以完成持久化操作,这过程中可以不需要掌握sql语句的书写,就开发效率而言会高于mybatis
缺点:
mybatis是一个半自动映射的框架,需要手工提供POJO、SQL和映射关系相对较hibernate,mybatis需要手写MyBatis的sql语句,工作量较大;
但可以配置动态SQL,并且优化SQL;支持存储过程,就大中型的项目而言,更推荐MyBatis的使用
2.2 创建数据库
-- 创建数据库,名称为 mybatis_study
create database mybatis_study;
-- 选中名称为 mybatis_study的数据库
use mybatis_study;
-- 创建用户表,
create table user(
# id 整数类型,为主键、自动递增
id int primary key auto_increment,
# 用户名 字符串类型,长度30个字符
username varchar(30),
# 密码 字符串类型,长度30个字符
password varchar(30)
);
2.3 持久化类
package cn.javabs.mybatisdemo.pojo;
public class User{
private Integer id;
private String username;
private String password;
// 生成getter和setter方法--快捷键是---> alt +shift+s 选择r
// 覆写 tostring方法--快捷键是---> alt +shift+s 选择 s
}
2.4 持久化映射信息配置文件
在src下创建cn.javabs.mybatisdemo.mapper包,用于存放映射文件,命名为UserMapper.xml
<mapper namespace="cn.javabs.mapper.UserMapper">
<!-namespace的属性值命名规范为:映射信息文件所在的包名+映射文件名称-->
<mapper namespace ="cn.javabs.mybatisdemo.mapper.UserMapper">
<insert id="addUser" parameterType="cn.javabs.mybatis.pojo.User">
insert into user(id,username,password) values(#{id},#{username},#{password})
insert>
<mapper>
2.5 持久化核心配置文件:
在src下创建一个xml文件,命名为mybatis-config.xml
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="jdbc">transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///user"/>
<property name="username" value="root"/>
<property name="password" value="sorry"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="cn/javabs/mapper/UserMapper.xml" />
mappers>
configuration>
添加用户
public class TestMybatisData{
@Test
public void addUserTest(){
// 通过字节输入流获取核心配置文件
InputStream is = TestMybatisData.class.getClassLoader.getResouceAsStream("mybatis-config");
// 构建Sql会话工厂对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuild().builder(is);
// 通过会话工厂对象获取session
SqlSession session = sessionFactory.openSession();
// 实例化持久化对象,并且完成赋值操作
User u = new User();
u.setId(3);
u.setUsername("李白");
//insert 中传入的第一个参数为映射文件的全包名+映射文件名
// 第二个参数为持久化对象
int rows = session.insert("cn.javabs.mybatisdemo.mapper.UserMapper.addUser",u);
if(rows > 0){
System.out.println("执行成功,已插入"+rows+"条语句");
}else{
System.out.println("执行失败);
}
}
}
删除用户
@Test
public void delUserById() {
InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
User u = new User();
u.setId(3);
int rows = session.delete("cn.javabs.mapper.UserMapper.deleteUserById",u);
if(rows>0){
System.out.println("语句执行成功,删除"+rows+"条数");
}else{
System.out.println("删除语句失败");
}
session.commit();
session.close();
}
映射配置文件:
<delete id="deleteUserById" parameterType="Integer">
delete from user where id = #{id}
delete>
更改用户
@Test
public void updateUserTest {
InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
User u = new User();
u.setId(31);
u.setUsername("赵云");
int rows = session.update("cn.javabs.mapper.UserMapper.updateUserById", u);
if(rows > 0){
System.out.println("更新了"+rows+"条记录");
}else{
System.out.println("更新失败");
}
session.commit();
session.close();
}
配置文件可以更改为
id="updateUserById" parameterType="cn.javabs.po.User">
update user set username = #{username} where id = #{id}
查询全部用户
@Test
public void findAll() {
InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
User u = new User();
u.setId(3);
List
配置文件可以更改为:
<select id="queryUser" resultType="cn.javabs.po.User">
select * from user
select>
根据Id查询用户
@Test
public void findUserById() {
InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
User u = new User();
u.setId(31);
u = session.selectOne("cn.javabs.mapper.UserMapper.queryUserById", u);
if(u != null ){
System.out.println("当前用户是:"+u);
}else{
System.out.println("查询失败");
}
session.commit();
session.close();
}
配置文件可以更改为
<select id="queryUserById" parameterType="Integer" resultType="cn.javabs.po.User">
select * from user where id = #{id}
select>