• Mybatis总结之一


    今日内容:Mybatis数据持久层的一种表现,在一定程度上,取代了jdbc。

    MyBatis开发的大体步骤

    1.建maven......在pom.xml中进行配置添加Mybatis,junit测试jar包,添加连接mysql的数据库包

    2.在resources中配置SqlMapperConfig.xml文件,它的作用是配置数据库连接相关信息主要用于数据库中不变的信息,另外里面有个mappers标签,再里面有个userMapper.xml,里面可以有多个表

    3.userMapper.xml主要用于一些变化的信息,主要是操作信息如增删改查

    4.建库建表。

    5.建一个bean包,依据数据库中的表的字段来定义对应属性的类(实体类、即数据存储的模型),用于存储数据库中的内容,和数据库的表对应,在一定程度上也和前端页面对应。

    6.建一个dao包,定义个接口UserDao,里面定义了一些抽象方法,主要是增删改查等。

    package cn.sjl.dao;
    /**在UserDao接口中定义方法*/
    import java.util.List;
    
    import cn.sjl.bean.User;
    
    public interface UserDao{
    void insertUser(User user);
    void updateUser(User user);
    void deleteUserById(Integer id); //删除对象 依据id
    User selectUserById(Integer id); //查询对象 依据id; 返回值为User类数据类型
    List<User> selectAll(); //查询所有集合对象记录里所有的数据
    }

    7.同时在dao包中,定义一个实现UserDaoImpl类,里面主要是实现类,实现接口中的抽象方法,如

    public class UserDaoImpl implements UserDao{
    
    public void insertUser(User user) {
    
           //sqlSession(有点类似Connection)
    SqlSession session=SqlSessionUtil.getSession(); //去工厂拿?再看看书关于SqlSession
    session.insert("userDao.addUser",user); //找到固定节点并插入值(记录对象)     ??看看书,并看看代码底层方法
    session.commit(); //手动提交
    session.close(); //结束session会话
    }
    }

    8.其中的共有的,不变的部分抽出来了,并用static修饰,即当类被加载时就可以执行。

    //语法结构等价于DBUtils

    package cn.sjl.util;
    
    import java.io.InputStream;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import cn.sjl.dao.UserDaoImpl;
    
    public class SqlSessionUtil {
    private static SqlSessionFactory ssf;
    static {
    //读配置文件
    InputStream in=UserDaoImpl.class.getClassLoader().getResourceAsStream("SqlMapperConfig.xml");
    //SqlSessionFactory
    ssf=new SqlSessionFactoryBuilder().build(in);//??10:52
    }
    
    //返回sqlSession对象
    public static SqlSession getSession() {
        return ssf.openSession();
    }
    
    }

    //看一下旧书和厚书;

    9.编写映射文件,如下面这个插入操作:

     <mapper namespace="userDao">
        <!-- 插入user对象 -->
        <!-- void insertUser(User user)  -->
        <!-- 1.insert表示定义insert语句的节点
             2.id表节点的名称,值唯一
             3.parameterType表示定义的是参数的类型
             4.#{name}表示从user对象中取出name属性值,
               给username字段赋值
         -->
        <insert id="insertUser" 
                parameterType="cn.sjl.bean.User">
            insert into t_user(
                username,password,phone,email
            ) values (
                #{name},#{password},#{phone},#{email}
            )
    
        </insert>

    ------------------------------------------------------------------------------------------------------

    package test;
    
    import org.junit.Test;
    
    import cn.sjl.bean.User;
    import cn.sjl.dao.UserDao;
    import cn.sjl.dao.UserDaoImpl;
    
    public class TestUser {
    
    @Test
    public void testInsert() {
    UserDao userDao=new UserDaoImpl();
    User user=new User();
    user.setUsername("张三");
    user.setPassword("146557");
    user.setEmail("zhangsan@sjl.cn");
    user.setPhone("153646646");
    userDao.insertUser(user);
    }
    
    }

    //单元测试,写一点测试一点,不建议所有的都到最后再测试。
    //多练习

    //另外还有一种方法不用写实现类,mybatis框架自动添加

    ##10.测试类中

    public void testInsert(){
    SqlSession session = 
    SqlSessionUitl.getSession();
    
    //通过getMapper获取AddressDao的实现类对象
    AddressDao addressDao = session.getMapper(AddressDao.class);
    //namespace.id
    Address address = new Address();
    address.setProvince("北京市");
    address.setCity("市辖区");
    address.setArea("海淀区");
    address.setUserAddress("中鼎大厦7层");
    addressDao.insert(address);
    //提交事务
    session.commit();
    //关闭session
    session.close();
    } 

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    #{ }、${ } 的区别:

                #{ }中的参数是一个动态的占位符,${ }中的参数是一个固定的值;

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    CUDA运行时 Runtime(一)
    CUDA C++程序设计模型
    CUDA C++编程手册(总论)
    深度学习到底有哪些卷积?
    卷积神经网络去雾去雨方法
    马斯克如何颠覆航天? 1/5385成本,c++和python编程!
    CUDA 9中张量核(Tensor Cores)编程
    利用表达式调用全局变量计算出错原因
    述函数的作用,浏览器执行函数的过程
    表达式的差异和相同点
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/9515270.html
Copyright © 2020-2023  润新知