• Mybatis的select查询的三种方式


    1、首先建立一个测试的dao

    1 public interface IStudentDao {
    2 
    3     // 根据姓名查询
    4     List<Student> selectStudentsByName(String name);
    5 }

    2、对这个dao进行实现

     1 public class StudentDaoImpl implements IStudentDao {
     2 
     3     private SqlSession sqlSession;
     4 
     5     // 根据姓名查询
     6     public List<Student> selectStudentsByName(String name) {
     7         List<Student> students = null;
     8 
     9         try {
    10             sqlSession = MybatisUtil.getSqlSession();
    11             students = sqlSession.selectList("selectStudentsByName", name);
    12         } catch (Exception e) {
    13             e.printStackTrace();
    14         } finally {
    15             if (sqlSession != null) {
    16                 sqlSession.close();
    17             }
    18         }
    19         return students;
    20     }
    21 }

    3、utils的书写

     1 public class MybatisUtil {
     2     private static SqlSessionFactory sqlSessionFactory;
     3 
     4     public static SqlSession getSqlSession() {
     5         try {
     6             if (sqlSessionFactory == null) {
     7                 // 读取配置文件
     8                 InputStream inputStream = Resources
     9                         .getResourceAsStream("Mybatis.xml");
    10                 // 创建工厂
    11                 sqlSessionFactory = new SqlSessionFactoryBuilder()
    12                         .build(inputStream);
    13             }
    14         } catch (IOException e) {
    15             e.printStackTrace();
    16         }
    17         return sqlSessionFactory.openSession();
    18     }
    19 }

    4、配置文档

    (1)Mybatis.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     4 <configuration>
     5 
     6     <properties resource="jdbc.properties" />
     7 
     8     <!-- 别名标签 -->
     9     <typeAliases>
    10         <typeAlias type="com.liuya.demo.mybaits.crud.pojo.Student"
    11             alias="Student" />
    12     </typeAliases>
    13 
    14     <!-- 配置运行的数据库环境 -->
    15     <environments default="mysqlenvironment">
    16         <environment id="mysqlenvironment">
    17             <!-- 連接池在本地连接中使用,在SSM中不用,用C3P0和DBCP -->
    18             <transactionManager type="JDBC" />
    19             <dataSource type="POOLED">
    20                 <property name="driver" value="${driver}" />
    21                 <property name="url" value="${url}" />
    22                 <property name="username" value="${username}" />
    23                 <property name="password" value="${password}" />
    24             </dataSource>
    25         </environment>
    26     </environments>
    27 
    28     <!-- 连接映射文件 -->
    29     <mappers>
    30         <!-- 最终使用的都是package -->
    31         <mapper resource="com/liuya/demo/mybaits/crud/mapper/StudentMapper.xml" />
    32     </mappers>
    33 </configuration>

    (2)properties的书写

    #
    ##正式服务器
    driver = com.mysql.jdbc.Driver
    url = jdbc:mysql://127.0.0.1:3306/crud?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
    username = root
    password = 123456

    (3)mapper的书写

    <?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="test">
    
        <!-- 根据姓氏模糊查询 -->
        <select id="selectStudentsByName" resultType="Student">
            select
            NAME,AGE,SCORE from STUDENT where NAME like concat ('%',#{ooo},'%')
        </select>
    
    
    </mapper>

    5、测试的书写

     1 public class MyTest {
     2 
     3     private IStudentDao idao;
     4 
     5     @Before
     6     public void before() {
     7         idao = new StudentDaoImpl();
     8     }
     9     // 根据name查询一个学生
    10     @Test
    11     public void testSelectStudentsByName() {
    12         System.out.println("开始查询学生");
    13         List<Student> students = idao.selectStudentsByName("张");
    14         for (Student student : students) {
    15             System.out.println(student);
    16         }
    17         System.out.println("查询学生成功");
    18     }
    19 }

    这就是一个完整的select查询的书写,重点在于mapper中的select书写

            写法一(比较复杂):

    <!-- 根据姓氏模糊查询 -->
        <select id="selectStudentsByName" resultType="Student">
            select
            NAME,AGE,SCORE from STUDENT where NAME like concat ('%',#{ooo},'%')
        </select>
    写法二(一般使用的比较多):
    <!-- 根据姓氏模糊查询 -->
        <select id="selectStudentsByName" resultType="Student">
            select
            NAME,AGE,SCORE from STUDENT where NAME like '%'#{ooo}'%'
        </select>
    写法三(不建议使用,会有sql注入问题和加载速度慢的问题):
    <!-- 根据姓氏模糊查询 -->
        <select id="selectStudentsByName" resultType="Student">
            select
            NAME,AGE,SCORE from STUDENT where NAME like '%&{value}%'
        </select>
    like后的括号值,只能是value。
  • 相关阅读:
    (WPF)实现DataGrid中当某一列的值显示为密码样式
    利用双栈实现撤销与恢复逻辑
    WPF 中ContextMenu 在mvvm模式中的绑定问题
    WPF使用StringFormat绑定
    不注册调用COM组件
    再谈WPF绑定
    WPF的动态资源和静态资源
    MDI窗体(Winform)
    mysql 查询json字符串中符合条件的值
    phpstudy 导入sql到phpmyadmin中sql过大导致失败解决办法
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/7467544.html
Copyright © 2020-2023  润新知