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();
} 

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

#{ }、${ } 的区别:

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

posted @ 2018-08-21 23:57  贰零一八  阅读(151)  评论(0编辑  收藏  举报