Mybatis框架的模糊查询(多种写法)、删除、添加

      学习Mybatis这么多天,那么我给大家分享一下我的学习成果。从最基础的开始配置。

一、创建一个web项目,看一下项目架构

二、说道项目就会想到需要什么jar

  

三、就是准备大配置链接Orcl数据库

<?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>

     <!-- 别名的定制 -->
     <typeAliases>
        <!-- 按类型名定制别名  -->
        <!--   <typeAlias type="cn.happy.entity.Student" alias="Student"/> -->

        <!-- 拿当前指定包下的简单类名作为别名  -->
        <package name="cn.happy.entity"/>
     </typeAliases>

    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc的事务 -->
            <transactionManager type="JDBC" />
            <!-- 使用自带的连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                  <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
                <property name="username" value="T2" />
                <property name="password" value="T2" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="cn/happy/dao/StudentDAO.xml" />
    </mappers>
</configuration>

四、准备小配置

<?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="cn.happy.dao.IStudentDAO">//增删改
</mapper>

五、准备工具类

package cn.happy.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * 工具类
 * @author Happy
 *
 */
public class MybatisUtil {
    private static String config="mybatis-config.xml";
    static Reader reader;
    static{
        try {
            reader= Resources.getResourceAsReader(config);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
    //提供一个可以获取到session的方法
    public static SqlSession getSession() throws IOException{

        System.out.println("22222"+factory);
        //弊病,就是工厂是
           // 1.1 openSession到底做了什么
           SqlSession session = factory.openSession();
           System.out.println("3333");
            return session;
    }
}

六、准备实体类

package cn.happy.entity;

import java.util.Date;

/**
 * 学生实体类
 * @author Happy
 *
 */
public class Student {
  private Integer stuno;
  private String stuname;
  private Integer stuage;
  private Date studate;

public String toString() {
    return "Student [stuno=" + stuno + ", stuname=" + stuname + ", stuage="
            + stuage + ", studate=" + studate + "]";
}
public Integer getStuno() {
    return stuno;
}
public void setStuno(Integer stuno) {
    this.stuno = stuno;
}
public String getStuname() {
    return stuname;
}
public void setStuname(String stuname) {
    this.stuname = stuname;
}
public Integer getStuage() {
    return stuage;
}
public void setStuage(Integer stuage) {
    this.stuage = stuage;
}
public Date getStudate() {
    return studate;
}
public void setStudate(Date studate) {
    this.studate = studate;
}

}

七、下面是具体的代码增删改查前面是公用的

(一)下面实现查看所有

  1在接口定义方法

 //查询所有记录
   public List<Student> findAll() throws IOException;

  2在配置中=======>由于动态加载所以不需要实现类

  <!-- 查询所有 -->
    <select id="findAll" resultType="Student">
      select * from student
    </select>

3测试类中

IStudentDAO dao;
    @Before
    public void initData() throws IOException{
        SqlSession session = MybatisUtil.getSession();
        //动态踢出实现类
        //首先要改StudentDAO.xml改成<mapper namespace="cn.happy.dao.IStudentDAO">
        dao=session.getMapper(IStudentDAO.class);
    }
/**
     * selectALl学生
     * @throws IOException
     */

    @Test
    public void findAll() throws IOException{
        List<Student> list = dao.findAll();
        for (Student student : list) {
            System.out.println(student.getStuname());
        }

    }

(二)下面是添加

  1在接口定义方法

//添加
   public int addStu(Student stu) throws IOException;

  2在配置中=======>由于动态加载所以不需要实现类

<insert id="insertStudent" parameterType="Student" >
        insert into student(stuname,stuage,studate) values(#{stuname},#{stuage},#{studate})

     <!-- sqlserver 和Mysql 只有自自增  自增时机和insert时机: 先insert返回自增值

         Oracle先产生一个自增值,然后再执行insert
      -->
      <selectKey keyProperty="stuno" resultType="int">
      <!-- Mysql的 -->
           select @@identity
           <!-- orcl的 -->
           select sql_num.currval from dual
      </selectKey>

    </insert>

  3测试类中

@Test
    public void testAdd() throws IOException{
        Student stu=new Student();
        stu.setStuname("Y2161好人");
        stu.setStuage(21);
        stu.setStudate(new Date());

        System.out.println("添加前======="+stu);

        IStudentDAO dao=new StudentDAOImpl();
        dao.addStu(stu);

        System.out.println("添加后======="+stu);

    }

(二)下面是删除

  1在接口定义方法

 //删除
   public int delStu(int id) throws IOException;

  2在配置中=======>由于动态加载所以不需要实现类

<!--删除学生  -->

    <delete id="delStudent">
       delete from student where stuno=#{xxx}<!-- #{xxx}随便写,起到一个占位的作用 -->
    </delete>

  3测试类中

/**
     * 删除学生
     * @throws IOException
     */

    @Test
    public void delStudent() throws IOException{
        dao.delStu(2);
        System.out.println("ok");
    }
    

(二)下面是模糊查询

  1在接口定义方法

  //按照学生姓名查询学生集合(一个是实体一个是字符串其实都可以)
   public List<Student> findStudntByName(Student stu) throws IOException;
   public List<Student> findStudntByName(String stuname) throws IOException;

  2在配置中=======>由于动态加载所以不需要实现类

 <!--模糊查询  mysql的数据库 -->
    <select id="findStudentByName"  resultType="Student">
     <!--  select * from student where  stuname like  concat(‘%‘,#{stuname},‘%‘) -->
     select * from student where  stuname like ‘%${value}%‘
    </select>
    

  3测试类中

/**
     * 模糊查询
     * @throws IOException
     */

    @Test
    public void findStudentByName() throws IOException{

        /*Student stu=new Student();
        stu.setStuname("人");*/
        List<Student> list = dao.findStudntByName("人");
        for (Student student : list) {
            System.out.println(student.getStuname());
        }

    }
    
时间: 2024-08-07 01:40:38

Mybatis框架的模糊查询(多种写法)、删除、添加的相关文章

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

三大框架中模糊查询代码

js获取查询条件,并去后台查询 function queryByName(){                    //获取查询条件的用户名                    var queryName=$("#queryName").val();                    alert(queryName);                    //进行后台跳转                    window.location.href="<%=

StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改

前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey", "*key*"),然后再使用相关的方法进行相关的批量操作,但是如果缓存数据量比较大,效率低下,那么可以使用Lua脚本进行模糊查询的批量操作:ScriptEvaluate(LuaScript.Prepare(...)). 通过keys进行模糊查询后的批量操作 批量删除 1 var

mybatis oracle 分页+模糊查询

实现分页的方式有很多,但常用的是通过SQL来显示分页. 下面就来介绍mybatis 来实现Oracle分页的写法:(ps:不同数据库的写法有区别) 一.分页数据: 1 <select id="findPageByCode" parameterType="java.util.Map" resultMap="pageVO"> 2 select * from 3 ( 4 select A.* ,ROWNUM rn 5 from (selec

8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)

多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public User() { } public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } private int id; private String name;

Mybatis中的模糊查询

1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 我就是按照此方法实现了功能. 其实还有种方法:像这样写也行: 2. 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE '%${text}%'; 这个我试过之后,发现并没有实现模糊查询的功能,而且目前也不知道哪里出错了,如果有人知道请指教. 3. 程序中拼

mybatis中llike模糊查询中#和$的使用,以及bind标签的使用

关于#{}和${}就是jdbc中的预编译和非预编译 1.表达式: name like"%"#{name}"%" 打印的日志 ==>  Preparing: select * from user WHERE name like"%"?"%" ==>Parameters: 傻(String), 1(Integer) 能够查询出来,没有问题,这是使用了占位符来占位,写成SQL就是: name like "%&q

mybatis中的模糊查询,Oracle和MySQL中的concat

MySQL数据库,利用concat函数即可,MySQL不用能||连接字符串 mapper.xml select * from tb_content_category where title like concat('%',#{paramMap.TITLE, jdbcType=VARCHAR},'%') Oracle数据库,利用concat函数或者||,Oracle数据库利用concat函数时,需要嵌套concat,因为Oracle的concat函数每次只能连接两个字符串 mapper.xml s

mybatis模糊查询不同写法

工作中用到,写三种用法吧,第四种为大小写匹配查询 1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 2. 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE '%${text}%'; 3. 程序中拼接 Java // String searchText = "%" + text + "