JAVA从入门到精通之Mybatis笔记2
沉沙 2019-07-24 来源 : 阅读 460 评论 0

摘要:本篇文章探讨了JAVA从入门到精通之Mybatis笔记2,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了JAVA从入门到精通之Mybatis笔记2,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

JAVA从入门到精通之Mybatis笔记2

"

使用Mybatis完成的CRUD操作

个人总结的一些小规律

JAVA从入门到精通之Mybatis笔记2

学习过程中碰到的错误:

org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

虽然报错信息提示的 很明显是sql语法报错,不过我一时之间没有没有看出sql语句错在哪里,后来才发现是插入sql语句的括号写错了,不是小括号,而是大括号

错误写法:insert  into user(username,address,sex,birthday)value(#(username),#(address),#(sex),#(birthday);
正确写法:insert  into user(username,address,sex,birthday)value(#{username},#{address},#{sex},#{birthday});

JavaBean类

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 +                '}';
    }
}

dao层

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);    //根据id删除用户    void deleteUser(Integer userId);    //查询一个,根据id查询用户信息    User findById(Integer userId);    //根据名称模糊查询用户信息    List findByName(String username);    //查询总用户数    int findTotal();
}

配置文件

     
          select * from user;
    
                      select last_insert_id();
               insert  into user(username,address,sex,birthday)value(#{username},#{address},#{sex},#{birthday});
        
            update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
        
            delete from user where id=#{id}
        
            select * from user where id = #{uid}
        
            select * from user where username like #{name}
                select count(id) from 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 org.junit.After;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List;public class MybatisTest {    private InputStream in;//读取配置文件    private SqlSession sqlSession;//操作数据库    private IUserDao userDao;    @Before//用于在测试方法执行之前执行,在其他方法执行之前执行init方法    public void init() throws IOException {        //读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream(""SqlMapConfig.xml"");        //获取SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);        //获取sqlSession对象
       sqlSession = factory.openSession();        //获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }    @After//用于测试方法执行之后执行    public void destroy() throws IOException {        //提交事务
        sqlSession.commit();        //释放资源
        sqlSession.close();
        in.close();
    }    @Test    //查询所有用户    public void testFindAll() throws IOException {        //执行查询方法
        List users = userDao.findAll();        for(User user:users){
            System.out.println(user);
        }
    }    @Test    //保存用户    public void testSave(){
        User user = new User();
        user.setUsername(""王五"");
        user.setAddress(""北京市"");
        user.setSex(""男"");
        user.setBirthday(new Date());
        System.out.println(""保存前""+user);        //执行保存方法
        userDao.saveUser(user);
        System.out.println(""保存后""+user);
    }    @Test    //更新用户    public void testUpdate(){
        User user = new User();
        user.setId(50);
        user.setUsername(""李四"");
        user.setAddress(""北京市"");
        user.setSex(""男"");
        user.setBirthday(new Date());        //执行查询方法
        userDao.updateUser(user);
    }    @Test    //删除用户    public void testDelete(){
        userDao.deleteUser(48);
    }    @Test    //查询一个用户    public void testFindOne(){
        User user = userDao.findById(48);
        System.out.println(user);
    }    @Test    //查询一个用户    public void testFindByName(){
        List users = userDao.findByName(""%王%"");        for(User user :users){
            System.out.println(user);
        }
    }    @Test    //查询一个用户    public void testFindTotal(){        int count = userDao.findTotal();
        System.out.println(count);
    }
}

typeAliases标签和Package标签

                    -->
    -->

mybatis连接池的分类

连接池:我们在实际开发中都会使用连接池,因为他可以减少我们获取连接所消耗的时间

mybatis中的连接池

mybatis连接池提供了3种方式的配置:

配置的位置:主配置文件SqlMapConfig.xml的dataSource标签,type属性就是表示采用何种连接池方式

type属性的取值有三种

1.POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现

2.UNPOOLED 采用的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想

3.采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样的,如果不是web或者maven的war工程,是不能使用的(tomcat服务器,采用连接池就是dbcp连接池)

"      本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程