MyBatis学习笔记2----和mysql连接进行增删改查

mybatis和mysql数据库实现----增删改查

已经固定的方法类,
User.java实体类

MybatisUtils.java获取SqlSession对象的类.

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.IOException;
import java.io.InputStream;

public class MybatisUtils {
    
    
    private static SqlSessionFactory sqlSessionFactory;

    //静态代码会在初始会被加载
    static {
    
    
        try {
    
    
            //使用mybatis第一步,获取sqlSessionFactory对象
            String resource="mybatis-config.xml";
            InputStream inputStream= Resources.getResourceAsStream(resource);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //sqlSessionFactory是能执行sql的对象
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    //这里是在静态代码块之外,
    //有了SqlSessionFactory,就可以获取SqlSession的实例,sqlSession包含了数据库执行的SQL的所有方法
    public static SqlSession getSqlSession(){
    
    
        return sqlSessionFactory.openSession();

    }




}

mybatis-config.xml类

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">


<configuration>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="sa"/>
            </dataSource>
        </environment>

    </environments>


    <mappers>
        <mapper resource="com/kuang/dao/UserMapper.xml"></mapper>
    </mappers>


</configuration>

以上两个类可以作为工具类来使用。

1.select
我们需要修改:1.接口类

import com.kuang.pojo.User;

import java.util.List;
//使用mybatis不用在写实现类impl了
public interface UserDao {
    
    
    //查询全部用户
    List<User> getUserList();

    //更具id来查询用户
    User  getUserById(int id);//这里参数是基本类型

    //插入一个用户,这里类似是int,不是User
    int addUser(User user);//这里参数是对象

    //修改一个用户
    int updateUser(User user);

    int deleteUser(int id);

}

需要修改的
2.UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">



<mapper namespace="com.kuang.dao.UserDao">

    <select id="getUserList" resultType="com.kuang.pojo.User">
    select * from mybatis.user
  </select>

    <select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
        select * from mybatis.user where id=#{id}
    </select>

    <insert id="addUser" parameterType="com.kuang.pojo.User" >
        insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd});

    </insert>

    <update id="updateUser" parameterType="com.kuang.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
    </update>


    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id=#{id};
    </delete>
</mapper>

需要修改的测试类

public class UserDaoTest {
    
    

    @Test
    public void test(){
    
    
        //第一步:获取SqlSession对象
        SqlSession sqlSession= MybatisUtils.getSqlSession();

        //方式一,getMapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);

        List<User> userList=userDao.getUserList();//查询所有用户的方法

        for (User user:userList) {
    
    //输出
            System.out.println(user);
        }
            sqlSession.close();//关闭SqlSession
    }



    @Test
    public void TestgetUserById(){
    
    
        //第一步获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //获取getMapper
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        //写我们想要执行的方法
        User user = mapper.getUserById(1);//获取id是1的用户
        System.out.println(user);


        sqlSession.close();//最后一定要关闭sqlSession对象
    }


    //注意,增删改必须提交事务
    @Test
    public void TestaddUser(){
    
    
        //获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //获取Mapper
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        int res= mapper.addUser(new User(3, "11", "12345"));
        if(res>0){
    
    
            System.out.println("插入成功!!!");
        }

        sqlSession.commit();//提交事务,保持数据的一致性

        sqlSession.close();

    }

    //修改一个用户的账号密码
    @Test
    public void UpdateUserTest(){
    
    
        //获取SqlSession
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserDao mapper = sqlSession.getMapper(UserDao.class);
        mapper.updateUser(new User(2,"222","222"));
        sqlSession.commit();
        sqlSession.close();
    }


    //根据id,删除一个用户
    @Test
    public void deleteUserTest(){
    
    
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        mapper.deleteUser(1);
        sqlSession.commit();
        sqlSession.close();
    }




}

2.update
同上
3.insert

4.delete

#分析错误原因
读错先从控制台从下向上读。
1.标签不要匹配错误

2.在mybatis-comfig中mappers标签中的resource属性的路径必须是斜杠,不能是点

3.程序的配置文件mybatis-config.xml必须是符合规范.不能有一点的错误

4.NullPointerException,空指针异常,没有注册到资源
比如,在MybatisUtils.java中,变量的声明,在静态块里面就获取不到,
要提升作用域,放在static之前声明,然后sqlSessionFactory.openSession()就可以拿到

#Map封装----基本万能
当我们的实体类或者数据库中的表,字段或者参数过多,我们又只需要修改几个参数时,可以使用Map类型
UserDao.java接口

  //Map--键值对
    int addUser2(Map<String,Object> map);

UserMapper.xml

  <!--map修改密码-->
    <update id="updateUserPwdMap" parameterType="map">
        update mybatis.user set pwd=#{
    
    pwd} where id=#{
    
    id};
    </update>

测试

 @Test//map修改密码
    public void UpdateUserPwdMap(){
    
    
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        Map<String,Object>map=new HashMap<String, Object>();
        map.put("id",1);
        map.put("pwd",11111);
        mapper.updateUserPwdMap(map);
        sqlSession.commit();
        sqlSession.close();

    }

##like模糊查询
接口

//模糊查询
    List<User> getUserLike(String value);

UserMapper.xml,这里注意返回的类型一定要表清楚,否则会报错

  <!--like模糊查询-->
    <select id="getUserLike" resultType="com.kuang.pojo.User">
        select  * from mybatis.user where name like #{value};
    </select>


测试,这里要注意把通配符加上%李%。

 //like模糊查询
    @Test
    public  void likeTest(){
    
    
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> list=mapper.getUserLike("%李%");//java中SQL模糊查询要加%通配符
        for (User user:list
             ) {
    
    
            System.out.println(user);
        }
        sqlSession.close();

    }

通配符的写法二

也可以在标签中写,如下,然后在测试代码中把%去掉
select * from mybatis.user where name like “%” #{value} “%”;

猜你喜欢

转载自blog.csdn.net/weixin_45263852/article/details/114367514