MyBatis 对MYSQL 数据库进行增删改查案例详解

MyBatis实例:

主要需要配置的是以下两点。

1.添加支持的jar包

    (1)MyBatis支持的mybatis-3.0.2.jar

    (2)MYSQL数据库驱动包mysql-connector-java-5.1.12-bin.jar

    (3)代码提示的dtd

2.MyBatis的配置文件 (**-config.xml文件)以及SQL映射文件(Mapper.xml)

废话不多说,现在展示具体的代码(以Blog为例)

1.创建实体类(BlogBean.java)

package org.bolg.entity;

public class BlogBean {
 private Integer id;
 private String name;
 private String title;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 } 
}
2.编写配置文件(sqlMapper-config.xml)

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration>
<!--类型别名是为了Java类型命名一个短的名字,他只和XML配置有关,之用来减少类完全限定名的多余部分 -->
     <typeAliases type="org.blog.entity.BlogBean" alias="BlogBean"/>
<!-- MyBatis可以配置多种环境,这会帮助你将SQL映射应用于多种数据库之中(可以配置多个环境,但是你只能为每一个SqlSessionFactory实例选择一个) -->
<environments default="development">
    <environment   id  = "development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
         <property  name="driver" value="com.mysql.jdbc.driver">
         <property  name="url"  value="jdbc:mysql://localhost:3306/blog"/>
         <property  name="username" value="root">
        <property  name="password" value="root">
    </dataSource>
   </envrionment>
</environments>
  <mappers>
      <mapper resource="org/blog/dao/BlogMapper.xml">
   </mappers>
</configuation>

3.配置映射文件(BlogMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<!-- 命名空间的使用使得接口绑定成为可能,目的是使用更长的完全限定名来隔离语句-->
<mapper namespace="org.blog.dao.BlogDao">
<!-- 解剖语句:这个语句被称为getfindbyid,使用一个int(或者Integer),并返回一个BlogBean类型的对象,其中的键是列名,值是列对应的值 #{id} 表示MyBatis创建一个PreparedStatement(预处理语句)参数-->
<select id="getfindbyid" parameterType="int" resultType="BlogBean">
select * from tbl_blog where id=#{id}
</select>
<!--sql这个元素定义可重用的SQL代码段-->
<sql id="selectConums">name,title</sql>
<select id="getfindbyid" parameterType="int" resultType="BlogBean">
select id,<include refid="selectConums" /> from tbl_blog where id=#{id}
</select>
<select id="getfind" parameterType="BlogBean" resultType="BlogBean">
   select * from blog where 1=1 
   <if test="name != null">
    and name=#{name}
   </if>
   <if test="title != null">
    and title like #{title}
   </if>
  </select>
  
  <insert id="addBlog" parameterType="BlogBean">  <!-- 该处的parameterType中的值是在配置文件中设置的别名 -->
   insert into blog(id,<include refid="selectConums"/>) values(#{id},#{name},#{title})
  </insert>
  
  <update id="updateBlog" parameterType="BlogBean"> <!-- 该处的parameterType中的值是在配置文件中设置的别名 -->
   update blog set name=#{name} where id=#{id}
  </update>
  <delete id="deleteBlog" parameterType="int">
   delete from blog where id=#{id}
  </delete>
  
 </mapper> 
 
 4.创建接口(BlogDao.java)

package org.blog.dao;

import java.util.List;

import org.bolg.entity.BlogBean;

public interface BlogDao {
 
// public BlogBean getfindbyid(int id);

 //当用集合类list接收获得的数据的时候返回值的类型必须是List
 public List<BlogBean> getfindbyid(BlogBean blog);
 
 public int addBlog(BlogBean blog);
 
 public int deleteBlog(int id);
 
 public int updateBlog(BlogBean blog);
 
 public List<BlogBean> getfind(BlogBean condition);
 
}

5.测试类(test.java)

package org.blog.test;

import java.io.IOException;
import java.io.Reader;
import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.SqlMapperException;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.blog.dao.BlogDao;
import org.bolg.entity.BlogBean;

public class Test  {
 public static void main(String args[]) throws Exception
 {
String resouces="sqlMapper-config.xml";
Reader reader = Resources.getResourceAsReader(resouces);
SqlSessionFactoryBuilder sqlSessionFactory = new SqlSessionFactoryBulider().bulid(reader);
/*
   * 
   * 每个线程都应该有它自理的SqlSession实例,SqlSession实例不能共享,它也是线程不安全的。因此最佳的范围是请求或者方法范围。绝对不能将SqlSession实例
   * 的引用放在一个类的静态字段甚至是实例字段中。也绝对不能将SqlSession实例的引用放在任何类型的管理范围内,比如Serlvet架构中的HttpSession.如果你现在
   * 正在使用任意的Web框架,要考虑SqlSession放在一个和HTTP请求对象类似顶峰范围内。换句话说,基于收到的HTTP请求,你可以打开一个SqlSession,然后返回响应
   * 就可以关闭它了。关闭Session很重要,你应该确保使用finally块来关闭它。
   * 案例解析:
   * SqlSession session = sqlsessionfactory.openSession();
   * try{
   *  on work;
   * }finally{
   *   session.close();
   * }
   * 在代码中一贯使用这种方式,你能够确保所有的数据源都能够正常的关闭。
   */
SqlSession sqlSession = sqlSessionFactory.openSession();
//查找数据
BlogBean blog  = (BlogBean) session.selectOne("org.blog.dao.BlogMapper.getfindbyid",2);
Integer id = blog.getId();
String name = blog.getName();
String title = blog.getTitle();
System.out.println(name + title);
/*
   * 
   * 映射器是你创建绑定映射语句的接口。映射器接口的实例可以从SqlSession中获取到。
   * 从技术的角度来说,请被请求是,任意映射器是里的最宽范围和SqlSession是相同的。然而映射器实例的最佳范围是方法范围。也就是说,它们应该在使用它们的
   * 方法中被请求,然后就抛弃掉。
   * 它们不需要明确的关闭,那么在请求对象中保存它们也就不是什么问题了,这和SqlSession相似。
   * 在这个水平上管理太多的资源的话会失控,保持简单,将映射器放在方法范围内。
   */
  /*
   * 
   * 当映射文件BlogMapper.xml中名称为getfindbyid的语句中的parameterType的类型是基本类型(int)的时候
   * 可以使用以下代码进行数据的查询操作
   */
BlogDao blogdao = session.getMapper(BlogDao.class);
BlogBean result = blogdao.getfindbyid(4);
System.out.println(result.getName + result.getTitle());

 /*
   * 
   * 当映射文件BlogMapper.xml中名称为getfindbyid的语句中的parameterType的类型是对象实体或者是List集合类的时候
   * 可以使用以下代码进行数据的查询操作
   */
//  BlogBean blog = new BlogBean();
//  blog.setId(4);
//  BlogDao blogdao = session.getMapper(BlogDao.class);//接口的实现类
//  List<BlogBean> blist = (List<BlogBean>)blogdao.getfindbyid(blog);
//  for (BlogBean blogBean : blist) {
//   System.out.println("数据是==============》"+blogBean.getTitle().toString());
//  }
  
  BlogDao blogdao = session.getMapper(BlogDao.class);//获取接口的实现类
  BlogBean blogbean = new BlogBean();
//  blogbean.setName("钱九");
  blogbean.setTitle("%天气%");
  List<BlogBean> blist = blogdao.getfind(blogbean);
  for (BlogBean blogBean2 : blist) {
   System.out.println(blogBean2.getName()+"==============="+blogBean2.getTitle());
  }
  

  //添加数据
//  BlogBean blog = new BlogBean();
//  blog.setId(8);
//  blog.setName("赵四");
//  blog.setTitle("灰蒙蒙的天气真难受!");
//  //int isresult = session.insert("org.blog.dao.BlogMapper.addBlog", blog);
//  BlogDao blogdao = session.getMapper(BlogDao.class);
//  int isresult = blogdao.addBlog(blog);
//  session.commit();//手动提交给后台数据库
//  if(isresult == 1){
//   System.out.println("添加成功!");
//  }else{
//   System.out.println("添加失败!");
//  }
//  
  
  //修改操作
//  BlogBean blog = new BlogBean();
//  blog.setId(8);
//  blog.setName("王五");
//  BlogDao blogdao = session.getMapper(BlogDao.class);
//  int isresult = blogdao.updateBlog(blog);
//  if(isresult == 1)
//  {
//   System.out.println("修改成功!");
//  }else{
//  System.out.println("修改成功!");
//  }
  
  //删除操作
//  BlogDao blogdao = session.getMapper(BlogDao.class);
//  int isresult = blogdao.deleteBlog(8);//通过使用接口进行想用的删除操作
//  if(isresult == 1)
//  {
//   System.out.println("删除成功!");
//  }else{
//   System.out.println("删除失败!");
//  }
  session.close();
  
 }
}




  1.  <typeAliases>  
  2.         <!--给实体类起一个别名 user -->  
  3.         <typeAlias type="com.forum.po.User" alias="User" />  
  4.     </typeAliases>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值