栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis二

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis二

今日内容
  • 一、自定义Mybatis框架基于注解开发
    • 1.回顾自定义mybatis的流程分析
    • 2.基于注解的自定义再分析
  • 二、使用Mybatis完成CRUD
    • 1.回顾Mybatis的环境搭建-实现查询所有功能
    • 2.Mybatis的CRUD-保存操作
    • 3.Mybatis的CRUD-修改和删除操作
    • 4.Mybatis的CRUD-查询一个和模糊查询
    • 5.Mybatis的CRUD-查询返回一行一列和占位符分析
    • 6.Mybatis的CRUD-保存操作的细节-获取保存数据的id
    • 7.Mybatis中参数的深入-使用实体类的包装对象作为查询条件
    • 8.Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式
  • 三、使用Mybatis完成DAO层的开发
    • 1.Mybatis中编写dao实现类的使用方式-查询列表
    • 2.Mybatis中编写dao实现类的使用-保存操作
    • 3.Mybatis中编写dao实现类的使用-修改删除等其他操作
    • 4.properties标签的使用及细节
    • 5.typeAliases标签和package标签


一、自定义Mybatis框架基于注解开发 1.回顾自定义mybatis的流程分析

2.基于注解的自定义再分析

二、使用Mybatis完成CRUD 1.回顾Mybatis的环境搭建-实现查询所有功能
// log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn


    4.0.0

    com.itheima
    day01_eesy_01mybatis
    1.0-SNAPSHOT
    jar

    
        
            org.mybatis
            mybatis
            3.4.5
        
        
            mysql
            mysql-connector-java
            5.1.6
        
        
            log4j
            log4j
            1.2.12
        
        
            junit
            junit
            4.10
        
    





    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    

    
    
        
    




    
    
        select * from user
    

package com.itheima.domain;

import java.io.Serializable;
import java.util.Date;


public class User implements Serializable{

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + ''' +
                ", birthday=" + birthday +
                ", sex='" + sex + ''' +
                ", address='" + address + ''' +
                '}';
    }
}

package com.itheima.dao;

import com.itheima.domain.User;

import java.util.List;


public interface IUserDao {

    
    List findAll();
}

package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;


public class MybatisTest {

    
    public static void main(String[] args)throws Exception {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}

2.Mybatis的CRUD-保存操作




    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    

    
    
        
    




    
    
        select * from user
    

    
    
        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
    
    
    
    
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
    

    
    
        delete from user where id = #{uid}
    

package com.itheima.dao;

import com.itheima.domain.User;

import java.util.List;


public interface IUserDao {

    
    List findAll();

    
    void saveUser(User user);

    
    void updateUser(User user);

    
    void deleteUser(Integer userId);
}

package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;


public class MybatisTest {
    private InputStream in;
    private SqlSession sqlSession;
    private IUserDao userDao;

    @Before//用于在测试方法执行之前执行
    public void init()throws Exception{
        //1.读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSession对象
        sqlSession = factory.openSession();
        //4.获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }

    @After//用于在测试方法执行之后执行
    public void destroy()throws Exception{
        //提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
        in.close();
    }
    
   
    @Test
    public void testFindAll(){
        //5.执行查询所有方法
        List users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }

    }

    
    @Test
    public void testSave(){
        User user = new User();
        user.setUserName("modify User property");
        user.setUserAddress("北京市顺义区");
        user.setUserSex("男");
        user.setUserBirthday(new Date());
        //5.执行保存方法
        userDao.saveUser(user);
    }

    
    @Test
    public void testUpdate(){
        User user = new User();
        user.setId(50);
        user.setUserName("mybastis update user");
        user.setAddress("北京市顺义区");
        user.setSex("女");
        user.setBirthday(new Date());

        //5.执行保存方法
        userDao.updateUser(user);
    }

    
    @Test
    public void testDelete(){
        //5.执行删除方法
        userDao.deleteUser(48);
    }
}

4.Mybatis的CRUD-查询一个和模糊查询




    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    

    
    
        
    




    
    
        select * from user where id = #{uid}
    

    
    
        select * from user
    

    
    
        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
    
    
    
    
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
    

    
    
        delete from user where id = #{uid}
    

    
    
          select * from user where username like #{name}
        
   

    
    
        select * from user
    

    
    
        
        
            select last_insert_id();
        
        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
    


package com.itheima.dao;

import com.itheima.domain.User;

import java.util.List;


public interface IUserDao {

    
    List findAll();

    
    void saveUser(User user);
}

package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;


public class MybatisTest {
    private InputStream in;
    private SqlSession sqlSession;
    private IUserDao userDao;

    @Before//用于在测试方法执行之前执行
    public void init()throws Exception{
        //1.读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSession对象
        sqlSession = factory.openSession();
        //4.获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }

    @After//用于在测试方法执行之后执行
    public void destroy()throws Exception{
        //提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
        in.close();
    }
    
   
    @Test
    public void testFindAll(){
        //5.执行查询所有方法
        List users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }

    }

    
    @Test
    public void testSave(){
        User user = new User();
        user.setUserName("modify User property");
        user.setAddress("北京市顺义区");
        user.setSex("男");
        user.setBirthday(new Date());
        System.out.println("保存操作之前:"+user);
        //5.执行保存方法
        userDao.saveUser(user);

        System.out.println("保存操作之后:"+user);
    }
}


7.Mybatis中参数的深入-使用实体类的包装对象作为查询条件
OGNL表达式:
Object Graphic Navigation Language
对象	图	导航	   语言
它是通过对象的取值方法来获取数据。在写法上把get给省略了。
比如:我们获取用户的名称
	类中的写法:user.getUsername();
	OGNL表达式写法:user.username
mybatis中为什么能直接写username,而不用user.呢:
	因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名




    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    

    
    
        
    




    
    
        select * from user where username like #{user.username}
    


package com.itheima.domain;


public class QueryVo {

    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

package com.itheima.dao;

import com.itheima.domain.User;

import java.util.List;


public interface IUserDao {

    
    List findAll();
    
    
    List findUserByVo(QueryVo vo);
}

package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;


public class MybatisTest {
    private InputStream in;
    private SqlSession sqlSession;
    private IUserDao userDao;

    @Before//用于在测试方法执行之前执行
    public void init()throws Exception{
        //1.读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSession对象
        sqlSession = factory.openSession();
        //4.获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }

    @After//用于在测试方法执行之后执行
    public void destroy()throws Exception{
        //提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
        in.close();
    }
    
   
    @Test
    public void testFindAll(){
        //5.执行查询所有方法
        List users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }

    }

    
    @Test
    public void testFindByVo(){
        QueryVo vo = new QueryVo();
        User user = new User();
        user.setUserName("%王%");
        vo.setUser(user);
        //5.执行查询一个方法
        List users = userDao.findUserByVo(vo);
        for(User u : users){
            System.out.println(u);
        }
    }
}

8.Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式




    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    

    
    
        
    





    
    
        
        
        
        
        
        
        
    


    
    
        select * from user where id = #{uid}
    

    
    
        select count(id) from user;
    

    
    
        select * from user;
    

package com.itheima.domain;

import java.io.Serializable;
import java.util.Date;


public class User implements Serializable {

    private Integer id;
    private String username;
    private String address;
    private String sex;
    private Date birthday;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + ''' +
                ", address='" + address + ''' +
                ", sex='" + sex + ''' +
                ", birthday=" + birthday +
                '}';
    }
}

package com.itheima.dao;

import com.itheima.domain.User;

import java.util.List;


public interface IUserDao {

    
    List findAll();
}

package com.itheima.dao.impl;

import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;


public class UserDaoImpl implements IUserDao {

    private SqlSessionFactory factory;

    public UserDaoImpl(SqlSessionFactory factory){
        this.factory = factory;
    }

    @Override
    public List findAll() {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession中的方法,实现查询列表
        List users = session.selectList("com.itheima.dao.IUserDao.findAll");//参数就是能获取配置信息的key
        //3.释放资源
        session.close();
        return users;
    }
}

package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.Date;
import java.util.List;


public class MybatisTest {

    private InputStream in;
    private IUserDao userDao;

    @Before//用于在测试方法执行之前执行
    public void init()throws Exception{
        //1.读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工厂对象,创建dao对象
        userDao = new UserDaoImpl(factory);
    }

    @After//用于在测试方法执行之后执行
    public void destroy()throws Exception{
        //6.释放资源
        in.close();
    }

    
    @Test
    public void testFindAll(){
        //5.执行查询所有方法
        List users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }

    }
}

2.Mybatis中编写dao实现类的使用-保存操作




    
    
        select * from user;
    

    
    
        
        
            select last_insert_id();
        
        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
    

    
    
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
    

    
    
        delete from user where id = #{uid}
    
    
    
    
          select * from user where username like #{name}
   

    
    
        
        select * from user;
    

    
    
        
        
            select last_insert_id();
        
        insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday});
    

    
    
        update user set username=#{userName},address=#{userAddress},sex=#{userAex},birthday=#{userBirthday} where id=#{userId}
    

    
    
        delete from user where id = #{uid}
    
    
    
    
          select * from user where username like #{name}
        
   

    
    
        select * from user where username like #{user.username}
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号