当前位置:首页 > mybatis从入门到精通
// 根据name查询用户信息,得到一条记录的结果 @Test
publicvoid findUserByNameTest()throwsIOException{ }
// mybatis配置文件
String resource =\;
InputStream input =Resources.getResourceAsStream(resource); // 创建会话工厂
SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder()
.build(input);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过SqlSession操作数据库
List
sqlSession.close();
3.6 插入用户信息
3.6.1 User.xml映射文件:
insert into user(username,password) value(#{username},#{password})
parameterType:制定输入参数类型是pojo
#{}:中指定pojo属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值
3.6.2 测试代码:
@Test
publicvoid insertUserTest()throwsIOException{
// mybatis配置文件
String resource =\;
InputStream input =Resources.getResourceAsStream(resource); // 创建会话工厂
SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder()
.build(input);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过SqlSession操作数据库 User user =newUser(); user.setUsername(\);
}
user.setPassword(\);
sqlSession.insert(\,user); //提交事务
sqlSession.commit(); // 释放资源
sqlSession.close();
3.7 自增主键返回
mysql自增主键,执行insert提交之前自动生成一个自增主键。
通过mysql函数获取到刚刚插入的记录的自增主键 last_insert_id() ,是在insert
之后调用此函数
3.7.1 User.xml映射文件配置:
SELECT LAST_INSERT_ID() parameterType:制定输入参数类型是pojo #{}:中指定pojo属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 resultType=\>
insert into user(username,password) value(#{username},#{password})
3.7.2 程序代码中直接获取
@Test
publicvoid insertUserTest()throwsIOException{
// mybatis配置文件
String resource =\;
InputStream input =Resources.getResourceAsStream(resource); // 创建会话工厂
SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder()
.build(input);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过SqlSession操作数据库 User user =newUser(); user.setUsername(\); user.setPassword(\);
sqlSession.insert(\,user);
}
//提交事务
sqlSession.commit();
System.out.println(user.getUid()); // 释放资源
sqlSession.close();
3.8 非自增主键的返回
使用mysql的uuid()函数生成主键,需要修改表中uid字段类型为string,长度为35
执行的思路:
先通过uuid()查询到主键,将主键输入到sql语句中 执行uuid语句的顺序相对于insert语句之前
SELECT uuid()
insert into user(uid,username,password) value(#{uid},#{username},#{password})
3.9 删除和更新用户
delete from user where uid =#{id}
update user set username=#{username},password=#{password} where
uid=#{uid}
3.10 #{}和${}
3.11 mybatis和hibernate的区别
hibernate:是一个标准的ORM框架(对象关系映射)。不需要写sql,都是自动生成的。对sql语句进行优化、修改比较困难
适用于需求变化不多的中小型项目,比如:后台管理项目
mybatis:专注是sql本身,在映射文件中需要程序员自己编写sql语句,优化比较方便。mybatis是一个不完全的ORm框架;虽然程序员自己写sql,也可以实现映射(输入、输出映射)。
适用于需求变化较多的项目,比如:互联网项目。
4、mybatis开发dao两种方法:
1)原始dao开发方法(程序需要编写dao接口和dao实现类) 2)mybatis的mapper接口(相当于dao接口)代理开发方法
4.1 SqlSession使用范围
// mybatis配置文件
String resource =\;
InputStream input =Resources.getResourceAsStream(resource); // 创建会话工厂
SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(input); // 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
4.1.1 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 4.1.2 通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlsessionFactory
4.1.3 sqlSession是一个面向用户的接口:SqlSession中提供了很多操作数据库的方法;是线程不安全的;Sqlsession最佳适用场合在方法体内,定义成局部变量使用。
4.2 原始dao的开发方法(程序员需要写dao接口和dao实现类) 4.2.1 程序员需要向dao实现类中注入SqlSessionFactory UserDao接口:定义方法(抛异常)
UserDaoImpl类:实现接口UserDao,并通过构造函数的方法向UserDaoImpl类注入SqlSessionFactory;
UserDaoImplTest类:创建SqlSessionFactory实例,在创建UserDao对象 4.2.2 总结原始dao开发问题
共分享92篇相关文档