1.添加用户
1.1映射文件
在User.xml文件中配置添加用户的Statement
1.2程序代码
1.3自增主键返回
Mysql自增主键,在执行insert提交之前自动生成一个自增主键
通过mysql函数获取到刚插入记录的自增主键:
LAST_INSERT_ID()
是insert之后,需要修改insertUser定义
1.4非自增主键返回(使用uuid())
使用mysql的uuid()函数生成主键,需要修改表中id字段类型为String,长度设置为35位
执行思路:
先通过uuid()查询主键,将主键输入到sql语句中。
执行uuid()语句顺序相对于insert语句之前执行
通过Oracle序列生成主键
select 序列名.nextval()
insert into userinfo(id,username,birthday,sex,address)value(#{id},#{username},#{birthday},#{sex},#{address}) -->
2.删除用户
2.1映射文件
select LAST_INSERT_ID()
insert into userinfo(username,sex,birthday,address)value(#{username},#{sex},#{birthday},#{address})
<update id="updateUserById" parameterType="com.mybatis.model.User">
update userinfo
set
username=#{username},sex=#{sex},birthday=#{birthday},address=#{address}
where id=#{id}
update>
<delete id="deleteUserById" parameterType="Integer">
delete from userinfo where id=#{id}
delete>
2.2Java代码
//添加用户
@Test
public void insertUser() throws IOException {
//mybatis配置文件
String resource="SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream=Resources.getResourceAsStream(resource);
//创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=new User();
user.setUsername("王小明");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("深圳");
sqlSession.insert("test.insertUser",user);
sqlSession.commit();
System.out.println(user.getId());
}
//更新
@Test
public void updateUserById() throws IOException {
//mybatis配置文件
String resource="SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream=Resources.getResourceAsStream(resource);
//创建会话工厂,传入mybatis配置文件
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=new User();
user.setId(10);
user.setUsername("李小明");
user.setBirthday(new Date());
user.setAddress("深圳");
user.setSex("男");
sqlSession.update("test.updateUserById", user);
sqlSession.commit();
}
@Test
public void deleteUserById() throws IOException {
//mybatis配置文件
String resource="SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream=Resources.getResourceAsStream(resource);
//创建会话工厂,传入mybatis配置文件
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUserById", 14);
sqlSession.commit();
}
3.Mybatis和Hibernate的不同
Mybatis和hibernate不同,mybatis不完全是一个orm框架,因为mybatis需要自己写sql语句。Mybatis可以通过xml或者注解的方式配置要运行的java语句,将java对象和SQL语句映射生成最终要执行的sql,最后将SQL执行的结果再映射成对象。
Mybatis学习门槛低,简单易学,程序员直接写原生态的sql;mybatis无法做到数据无关性
Hibernate数据无关性好。
4.Mybatis解决Jdbc连接数据库的问题
1.数据库连接,使用时创建,不使用就立即释放,对数据可进行频繁连接和关闭,造成数据库资源浪费,影响数据库性能
解决方案:使用数据连接池管理数据库连接
解决:在SqlMapConfig.xml中配置数据连接池,使用数据连接池管理数据库连接
2.将sql语句硬编码到sql代码中,如果sql语句修改,需要重新编译java代码,不利于系统维护
解决方案:将sql语句配置在xml配置文件中,即sql变化,不需要对java代码重新编译
解决:将Sql语句配置在XXXmapper.xml文件中与java代码分离
3.向prparedStatement中设置参数,对占位符为止和设置参数值,硬编码在java代码中,不利于系统维护
设想:将sql语句即占位符合参数全部配置在xml中
解决:Mybatis自动将java对象映射到sql语句,通过statement中的parameterType定义输入参数的类型
4.在resultSet中遍历结果姐数据是,存在硬编码,将获取的表的字段进行硬编码,不利于系统维护,设想,将查询的结果集自动映射成java对象
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型