zoukankan      html  css  js  c++  java
  • java# 认识mybatis# 基础篇# helle word

    what is mybatis

    mybatis是一款优秀的持久层框架,支持定制化sql,存储过程以及高级映射。封装了几乎所有JDBC接口避免手动设置入参与过去结果集。可以简单使用xml或注解来配置和映射sql信息。将接口和java的pojo映射成对应的数据库记录。

    mybatis 配置

    项目依赖

    <dependencies>
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.5</version>
      </dependency>
    
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.6</version>
      </dependency>
    
    </dependencies>
    

    mybatis 全局配置文件

    <?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>    
          <properties resource="db.properties"></properties>    
          <environments default="development">        
                <environment id="development">            
                      <transactionManager type="JDBC" />            
                      <dataSource type="POOLED">               
                            <property name="driver" value="${db.driver}" />                
                            <property name="url" value="${db.url}" />                
                            <property name="username" value="${db.username}" />                
                            <property name="password" value="${db.password}" />            
                      </dataSource>        
                </environment>    
          </environments>    
          <mappers>        
                <mapper resource="UserMapper.xml" />    
          </mappers> 
    </configuration>
    

    Mapper.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="test"> 
    <!-- 根据id获取用户信息 --> 
    <select id="findUserById" parameterType="int" resultType="com.kkb.mybatis.po.User">    
          select * from user where id = #{id} 
    </select>
    <!-- 根据名称模糊查询用户列表 --> 
    <select id="findUserByUsername" parameterType="java.lang.String"  resultType="com.kkb.mybatis.po.User">
         select * from user where username like '%${value}%' 
    </select>
    </mapper>
    

    映射文件参数配置说明:

    • parameterType:定义输入参数的Java类型
    • resultType:定义结果映射类型
    • #{}相当于JDBC中的?占位符
    • #{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql
    • ${value}取出参数名为value的值。将${value}占位符替换
      注意:如果是取简单数量类型的参数,括号中的参数名称必须为value

    Dao接口及实现

    生命周期(作用范围)
    1. sqlsession:方法级别
    2. sqlsessionFactory:全局范围(应用级别)
    3. sqlsessionFactoryBuilder:方法级别
    public interface UserDao {    
          public User findUserById(int id) throws Exception;    
          public List<User> findUsersByName(String name) throws Exception; 
    }
    
    public class UserDaoImpl implements UserDao {    
          //注入SqlSessionFactory    
          public UserDaoImpl(SqlSessionFactory sqlSessionFactory){        
                this. sqlSessionFactory = sqlSessionFactory;    
          }        private SqlSessionFactory sqlSessionFactory;       
          @Override    
          public User findUserById(int id) throws Exception {        
                SqlSession session = sqlSessionFactory.openSession();        
                User user = null;        
                try {            
                      //通过sqlsession调用selectOne方法获取一条结果集            
                      //参数1:指定定义的statement的id,参数2:指定向statement中传递的参数            
                      user = session.selectOne("test.findUserById", id);            
                      System.out.println(user);                                
                } finally{            
                      session.close();        
                }        return user;    
          }           
          @Override    
          public List<User> findUsersByName(String name) throws Exception {        
                SqlSession session = sqlSessionFactory.openSession();        
                List<User> users = null;        
                try {            
                      users = session.selectList("test.findUsersByName", name);           
                      System.out.println(users);                                
                } finally{            
                      session.close();        
                }        return users;    
          }    
    }
    

    测试代码

    public class MybatisTest {        
          private SqlSessionFactory sqlSessionFactory;        
          @Before    
          public void init() throws Exception {        
                SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();        
                InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");        
                sqlSessionFactory = sessionFactoryBuilder.build(inputStream);    
          }
          @Test    
          public void testFindUserById() {        
                UserDao userDao = new UserDaoImpl(sqlSessionFactory);        
                User user = userDao.findUserById(22);        
                System.out.println(user);    
          }    
          @Test    
          public void testFindUsersByName() {        
                UserDao userDao = new UserDaoImpl(sqlSessionFactory);        
                List<User> users = userDao.findUsersByName("老郭");        
                System.out.println(users);    
          } 
    }
    
  • 相关阅读:
    【php数组函数序列】之array_values()
    Mysql数据库编码问题3(修改数据库,表,字段编码为utf8)
    framework fckedit / KingEditor
    Linux + JDK/TOMCAT/Dia(Planner)/eclipse
    proxyServer squid / varnish / apache traffic server / ATS
    framework SiteMesh
    Linux + BusyBox
    对链表的插入操作
    链表原理
    链表的删除操作
  • 原文地址:https://www.cnblogs.com/xy-c/p/14307283.html
Copyright © 2011-2022 走看看