zoukankan      html  css  js  c++  java
  • mybatis

    1、mybatis配置:SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

    mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

     2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

     3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

    4.从mybatis的jar包结构可知mybatis用的是log4j记录日志,所以log4j.properties文件内容如下:

     

    # Global logging configuration

    #在开发的环境下,日志级别要设置成DEBUG,生产环境设置成info或error

    log4j.rootLogger=DEBUG, stdout

    # Console output...

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

     

    1.parameterType和resultType

      parameterType:在映射文件中通过parameterType指定输入 参数的类型。

      resultType:在映射文件中通过resultType指定输出结果的类型

     2.#{}和${}

    #{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap;

    如果接收简单类型,#{}中可以写成value或其它名称;

    #{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

    表示一个拼接符号,会引用sql注入,所以不建议使用表示一个拼接符号,会引用sql注入,所以不建议使用{};

    ${}接收输入参数,类型可以是简单类型,pojo、hashmap;

    如果接收简单类型,${}中只能写成value;

    ${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

    3.selectOne()和selectList()

      selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

      selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

    SqlMapConfig.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
     3  
     4 <configuration>
     5  <!-- 次属性可以指定类的全路径,同时给他一个别名  相当于(id="'class="")
     6      <typeAliases >
     7          <typeAlias type="com.mybatis.entry.userMapper" alias="umapper"/>
     8      </typeAliases>
     9  -->     
    10      <!-- 默认创建此工厂 默认模式 和spring整合后 environments配置将废除-->
    11      <environments default="development">
    12          <environment id="development">
    13 <!-- 使用jdbc事务管理,事务控制由mybatis管理-->
    14              <transactionManager type="JDBC" />
    15              <!-- 配置数据库连接信息, 数据库连接池,由mybatis管理 -->
    16              <dataSource type="POOLED">
    17                  <property name="driver" value="com.mysql.jdbc.Driver" />
    18                  <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
    19                  <property name="username" value="root" />
    20                  <property name="password" value="root" />
    21              </dataSource>
    22          </environment>
    23      </environments>  
    24     <!-- 加载映射文件 -->
    25      <mappers>
    26          <!-- 注册userMapper.xml文件, 
    27          userMapper.xml位于com/mybatis/entry这个包下,
    28                        所以resource写成com/mybatis/entry/userMapper.xml
    29          -->
    30          <mapper resource="com/mybatis/entry/userMapper.xml"/>
    31      </mappers>
    32  </configuration>

    mapper.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     3 
     4 <!-- namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离
     5     注意:使用mapper代理开发时,namespace有特殊作用
     6  -->
     7 
     8  <!--  <mapper namespace = "umapper">   -->
     9 <mapper namespace = "com.mybatis.entry.userMapper">
    10 <!-- 通过SELECT执行数据库查询 
    11     id:标识映射文件中的sql,称为statement的id;
    12         将sql语句封装在mapperStatement的对象中,所以Id称为Statement的id;
    13     parameterType:指定输入参数的类型,这里指定int型
    14     #{}:表示一个占位符;
    15     #{id}:其中Id表示接收输入的参数,参数名称就是Id,如果输入参数是简单类型,#{}中的参数名可以任意,可以是value或者其它名称;
    16     resultType:指定sql输出结果所映射的java对象类型,select指定resultType表示将单条记录映射成java对象。
    17 -->
    18 
    19     <select id = "getUser" parameterType="int" resultType="com.mybatis.entry.User">
    20         select * from users where id=#{id}
    21     </select>
    22 <!-- 根据用户名称模糊查询用户信息,可能返回多条数据
    23     resultType:指定的就是单条记录所映射的java类型;
    24     ${}:表示拼接sql字符串,将接收到的参数内容不加任何修饰拼接在sql中.
    25     使用${}拼接sql,可能会引起sql注入
    26     ${value}:接收输入参数的内容,如果传入的是简单类型,${}中只能使用value
    27  -->
    28 
    29     <select id = "nameLike" parameterType="java.lang.String" resultType="com.mybatis.entry.User">
    30         select * from users where name like '${value}%'
    31     </select>
    32     <insert id="insert" parameterType="com.mybatis.entry.User">
    33         insert into users (name,password) values (#{name},#{password})
    34     </insert>
    35     <delete id="delete" parameterType="int">
    36         delete from users where id = #{id}
    37     </delete>
    38     <update id="update">
    39         update users set name=#{name},password=#{password} where id = #{id}
    40     </update>
    41 </mapper>

    UserDAO.java

     1 package com.mybatis.dao;
     2 
     3 import java.io.InputStream;
     4 import java.util.List;
     5 import org.apache.ibatis.io.Resources;
     6 import org.apache.ibatis.session.SqlSession;
     7 import org.apache.ibatis.session.SqlSessionFactory;
     8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     9 
    10 import com.mybatis.entry.User;
    11 
    12 public class UserDAO {
    13     
    14     public User selectById(int id) throws Exception{
    15         //读取配置文件, // conf.xml:mybatis的配置文件
    16         InputStream in = Resources.getResourceAsStream("conf.xml");
    17         // 1.创建会话工场,传入mybatis的配置文件信息。通过配置文件 获得工厂对象(还可以指定使用那个数据源)
    18         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    19         // 2.通过工厂得到SqlSession。获取一个 会话
    20         SqlSession session = factory.openSession();
    21         
    22         /* 3.通过sqlSession操作数据库
    23          *    第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id;
    24          *    第二个参数:指定和映射文件中所匹配的parameterType类型的参数;
    25          *    sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象;
    26          **/
    27         // selectOne:查询一条结果
    28         User user = session.selectOne("getUser",id);
    29         return user;
    30     }
    31     
    32     public List<User> selectByNameLike(String s) throws Exception {
    33         InputStream in = Resources.getResourceAsStream("conf.xml");
    34         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    35         SqlSession session = factory.openSession();
    36         
    37         List<User> list = session.selectList("nameLike",s);
    38         
    39         return list;
    40     }
    41     
    42     public void insert(User user) throws Exception {
    43         InputStream in = Resources.getResourceAsStream("conf.xml");
    44         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    45         SqlSession session = factory.openSession();
    46         
    47         session.insert("insert",user);
    48         session.commit();
    49         session.close();
    50     }
    51     
    52     public void delete(int id) throws Exception {
    53         InputStream in = Resources.getResourceAsStream("conf.xml");
    54         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    55         SqlSession session = factory.openSession();
    56         
    57         session.delete("delete",id);
    58         session.commit();
    59         session.close();
    60     }
    61     
    62     public void update(User user) throws Exception{
    63         InputStream in = Resources.getResourceAsStream("conf.xml");
    64         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    65         SqlSession session = factory.openSession();
    66         
    67         session.update("update",user);
    68         session.commit();
    69         session.close();
    70     }
    71     
    72 }

    User.java

     1 package com.mybatis.entry;
     2 
     3 public class User {
     4      // 属性名称和数据库字段名称保持一致
     5     private Integer id;
     6     private String name;
     7     private String password;
     8 
     9     public User() {
    10         super();
    11     }
    12 
    13     public User(String name, String password) {
    14         this.name = name;
    15         this.password = password;
    16     }
    17 
    18     public User(Integer id, String name, String password) {
    19         super();
    20         this.id = id;
    21         this.name = name;
    22         this.password = password;
    23     }
    24 
    25     public Integer getId() {
    26         return id;
    27     }
    28     public void setId(Integer id) {
    29         this.id = id;
    30     }
    31     public String getName() {
    32         return name;
    33     }
    34     public void setName(String name) {
    35         this.name = name;
    36     }
    37     public String getPassword() {
    38         return password;
    39     }
    40     public void setPassword(String password) {
    41         this.password = password;
    42     }
    43     
    44     @Override
    45     public String toString() {
    46         return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
    47     }
    48     
    49     
    50 }

    Test.java

     1 package com.mybatis.service;
     2 
     3 import java.util.List;
     4 import org.junit.Test;
     5 import com.mybatis.dao.UserDAO;
     6 import com.mybatis.entry.User;
     7 
     8 public class UserService {
     9     
    10     @Test  
    11     public void testSelectById() throws Exception{
    12         UserDAO userDao = new UserDAO();
    13         User user = userDao.selectById(1);
    14         System.out.println("通过id查询");
    15         System.out.println(user);
    16     }
    17     
    18     @Test  
    19     public void testNameLike() throws Exception{
    20         UserDAO userDao = new UserDAO();
    21         List<User> list = userDao.selectByNameLike("刘");
    22         System.out.println("通过名字模糊查询");
    23         for(User u:list){
    24             System.out.println(u);
    25         }
    26     }
    27     
    28     @Test  
    29     public void testInser() throws Exception{
    30         UserDAO userDao = new UserDAO();
    31         User user = new User("王老师","123");
    32         userDao.insert(user);
    33         System.out.println("插入成功");
    34     }
    35     
    36     @Test 
    37     public void testDelete() throws Exception{
    38         UserDAO userDao = new UserDAO();
    39         userDao.delete(10);
    40         System.out.println("删除成功");
    41     }
    42     
    43     @Test
    44     public void testUpdate() throws Exception{
    45         UserDAO userDao = new UserDAO();
    46         User user = new User(10,"呃呃","123");
    47         userDao.update(user);
    48         System.out.println("更新成功");
    49     }
    50     
    51     @Test
    52     public void testUpdatePass() throws Exception{
    53         UserDAO userDao = new UserDAO();
    54         User userSe = userDao.selectById(10);
    55         System.out.println(userSe);
    56 
    57         User user = new User(userSe.getId(),userSe.getName(),"321");
    58         userDao.update(user);
    59         System.out.println("更新password成功");
    60     }
    61     
    62 }
  • 相关阅读:
    基于S3C2410的VIVI移植
    Android 多媒体
    target连上ubuntu,打adb shell后出现insufficient permissions for device错误
    git 学习
    ubuntu10.04中文乱码问题解决方法
    构建MINI2440开发板Ubuntu开发环境串口配置及使用
    如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误
    android Notification 学习
    Android declarestyleable:自定义控件的属性(attr.xml,TypedArray)的使用
    ubuntu 11.04 中的bug 渐显滚动条
  • 原文地址:https://www.cnblogs.com/liuyangv/p/8509211.html
Copyright © 2011-2022 走看看