Mybatis入门程序(三)-----------------------添加,更新和删除用户

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序列生成主键

<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">

      select 序列名.nextval()

      </selectKey>

       insert into userinfo(id,username,birthday,sex,address)value(#{id},#{username},#{birthday},#{sex},#{address}) -->

2.删除用户

   2.1映射文件

  <!--添加用户,
     paramesterType:指定输入类型是pojo  -->
     <insert id="insertUser" parameterType="com.mybatis.model.User">
     <selectKey keyProperty="id" resultType="Integer" order="AFTER">
      select LAST_INSERT_ID()
     </selectKey>
      insert into userinfo(username,sex,birthday,address)value(#{username},#{sex},#{birthday},#{address})
     </insert>

    <!--更新  -->

      <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定义输出结果的类型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值