MybatisDao

Posted xiaolan-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MybatisDao相关的知识,希望对你有一定的参考价值。

一、mybatisDao的编写(原始方式,不用)

1.接口编写

 

public interface UserDao {
    public void save(User user);
    public User findUserById(int id);
}

 

2.实现类

public class UserDaoImp implements UserDao {
    private SqlSessionFactory ssf;

    public UserDaoImp(SqlSessionFactory ssf) {
        this.ssf = ssf;
    }

    @Override
    public void save(User user) {
        SqlSession sqlSession = ssf.openSession();
        sqlSession.insert("insertUser", user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public User findUserById(int id) {
        SqlSession sqlSession = ssf.openSession();
        User user = sqlSession.selectOne("insertUser", id);
        sqlSession.commit();
        sqlSession.close();
        return user;
    }
}

3.测试

public class Demo03 {
    SqlSessionFactory sessionFactory;
    @Before
    public void before() throws IOException {
        //1.读取配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.通过SqlSessionFactoryBuilder创建SqlSessionFactory
        sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //3.通过SqlSessionFactoty创建SqlSession
    }
    @Test
    public void test01(){
        UserDao dao = new UserDaoImp(sessionFactory);
        User user1 = dao.findUserById(1);
        System.out.println(user1);
} }

二、常用dao编写方式(Mapper代理方式)

       程序员只需要写mapper接口就行,mybatis会自动生成动态代理实现类

          开发规范:

 

  1. mapper接口的全限定名要和mapper映射文件的namespace的值相同。
  2. mapper接口的方法名称要和mapper映射文件中的statement的id相同;
  3. mapper接口的方法参数只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致。
  4. mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致;

 

 第一步,编写接口

public interface UserMapper {
    public int save(User user);//返回受影响的行数.
    public User findUserById(int id);

}

第二步,编写mapper.xml

<mapper namespace="com.law.mapper.UserMapper">
    <!--namespace和接口名一样-->
    <insert id="save" parameterType="com.law.model.User">
        INSERT INTO user (username,sex,birthday,address) VALUE (#{username},#{sex},#{birthday},#{address})
    </insert>
    <select id="findUserById" parameterType="int" resultType="com.law.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

配置到全局配置文件中

        <mapper resource="com/law/mapper/UserMapper.xml"></mapper>

第三部,使用

@Test
    public void test01(){
      UserMapper userMapper = session.getMapper(UserMapper.class);//默认jdk动态代理
        System.out.println(userMapper.findUserById(1));
        userMapper.save(new User("xxx","x", new Date(),"sichuan"));

    }

 

三、配置Aliases(别名)

   <typeAliases>
        <!--<typeAlias type="com.gyf.model.User" alias="user"></typeAlias>-->
        <!--指定包名,别名就是类名,第一个小写 User 别名就是user-->
        <package name="com.law.model"></package>
        <package name="com.law.vo"></package>
    </typeAliases>

 

 四、配置文件加载的方式

    <mappers>

        <!--第一种:写映射文件的名字-->
        <!--<mapper resource="com/gyf/mapper/UserMapper.xml"></mapper>-->

        <!--第二种:写类名,一定要有个映射文件与之对应
        如果没有,那么在UserMapper要声明注解-->
        <!--<mapper class="com.gyf.mapper.UserMapper"></mapper>-->

        <!--第三种:可以写包名-->
        <mapper resource="com/law/mapper/UserMapper.xml"></mapper>
    </mappers>

 

 

 

 

 

 

 

 

 

以上是关于MybatisDao的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis String类型传递参数问题

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板