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 }

 

posted @ 2018-03-05 15:28  Mr·Liu  阅读(251)  评论(0编辑  收藏  举报