Mybatis是面向sql的持久层框架,他封装了jdbc访问数据库的过程,我们开发,只需专注于sql语句本身的拼装,其它复杂的过程全部可以交给mybatis去完成。
频繁创建和打开、关闭数据连接,太消耗资源
Sql语句存在硬编码,不利于维护
Sql参数设置硬编码,不利于维护
结果集获取与遍历复杂,存在硬编码,不利于维护,期望能够查询后返回一个java对象
在项目中创建SqlMapConfig.xml并对数据库和sql操作配置文件进行配置
创建user.xml并配置sql查询映射
@Test
public void demo1() throws Exception {
// 创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfbb= new SqlSessionFactoryBuilder();
// 创建核心配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("com/hhh/spring/demo/config/SqlMapConfig.xml");
// 通过输入流创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = ssfbb.build(inputStream);
// 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询
User user = sqlSession.selectOne("user.getUserByid", 1);
// 输出结果
System.out.println(user);
// 释放对象
sqlSession.close();
}
INSERT INTO USER
(`username`,
`birthday`,
`sex`,
`address`)
VALUES (#{username},
#{birthday},
#{sex},
#{address});
这里注意!!:在插入语句中的符号和赋值的符号不同!!插入的符号:`` 赋值里面的Values用 ' '
// 创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfbb= new SqlSessionFactoryBuilder();
// 创建核心配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("com/hhh/spring/demo/config/SqlMapConfig.xml");
// 通过输入流创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = ssfbb.build(inputStream);
// 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建对象
User user = new User();
user.setUsername("张飞");
user.setSex("1");
user.setBirthday(new Date());
user.setAddress("黑马");
// 执行插入
int insert = sqlSession.insert("user.insertUser", user);
// 事务提交
sqlSession.commit();
// 输出结果
System.out.println(insert);
// 释放对象
sqlSession.close();
INSERT INTO USER
(`username`,
`birthday`,
`sex`,
`address`,
`uuid2`)
VALUES (#{username},
#{birthday},
#{sex},
#{address},
#{uuid2});
在 执行核心命令之前或者之后,我们可以通过添加selectKey标签来进行额外的操作。
自增的化直接在insert标签里面添加useGeneratedKeys和 keyProperty就好了
// 配置selectKey 设置uuid
SELECT UUID()
INSERT INTO USER
(`username`,
`birthday`,
`sex`,
`address`,
`uuid2`)
VALUES (#{username},
#{birthday},
#{sex},
#{address},
#{uuid2});
// 创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfbb= new SqlSessionFactoryBuilder();
// 创建核心配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("com/hhh/spring/demo/config/SqlMapConfig.xml");
// 通过输入流创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = ssfbb.build(inputStream);
// 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建对象
User user = new User();
user.setUsername("张飞3");
user.setSex("1");
user.setBirthday(new Date());
user.setAddress("黑马");
// 执行插入
int insert = sqlSession.insert("user.insertUser", user);
// 事务提交
sqlSession.commit();
// 输出结果
System.out.println(insert);
// 释放对象
sqlSession.close();
在使用的时候,不需要进行设置,他会自动生成,但是在对象和数据库中需要设置对应的属性
// 创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfbb= new SqlSessionFactoryBuilder();
// 创建核心配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("com/hhh/spring/demo/config/SqlMapConfig.xml");
// 通过输入流创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = ssfbb.build(inputStream);
// 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建对象
User user = new User();
user.setUsername("caca ");
user.setId(30);
// 执行插入
sqlSession.update("user.updateUser", user);
// 事务提交
sqlSession.commit();
// 释放对象
sqlSession.close();
UPDATE
`user`
SET
`username` = #{username}
Where `id` =#{id};
// 创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfbb= new SqlSessionFactoryBuilder();
// 创建核心配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("com/hhh/spring/demo/config/SqlMapConfig.xml");
// 通过输入流创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = ssfbb.build(inputStream);
// 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行删除
sqlSession.delete("user.deleteUser", 30);
// 事务提交
sqlSession.commit();
// 释放对象
sqlSession.close();
DELETE
FROM `user`
Where `id` =#{id};