mybatis入门实例(xml文件配置)

官网:mybatis – MyBatis 3 | 简介

先做实例如下:

一:数据库建表(自己有的话可以不用创建)

CREATE  TABLE  USER(

id INT(20)  NOT  NULL  PRIMARY  KEY,

NAME  VARCHAR(30)   DEFAULT  NULL,

pwd VARCHAR(30)    DEFAULT  NULL

)ENGINE=INNODB   DEFAULT  CHARSET=UTF8;

INSERT INTO USER(id,NAME,pwd)VALUES

(1,'张子谦','123456'),

(2,'张子涵','123456'),

(3,'张飞','12345678')

二:导入依赖需要三个依赖:

 <dependency>
      

    mysql

    mysql-connector-java

    5.1.40


    dependency>
    <
dependency>
        <
groupId>org.mybatisgroupId>
        <
artifactId>mybatisartifactId>
        <
version>3.5.2version>
    dependency>
    <
dependency>
        <
groupId>junitgroupId>
        <
artifactId>junitartifactId>
        <
version>4.12version>
        <
scope>testscope>
    dependency>
三:编写核心配置文件mybatis.xml

xml version="1.0" encoding="UTF-8" ?>
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&useUnicode=true&characterEncoding=UTF-8"/>
                <
property name="username" value="root"/>
                <
property name="password" value="root"/>
            dataSource>
        environment>
    environments>

//每一个Mapper.xml文件都需要在mybatis核心配置文件中注册
    <mappers>
        <
mapper  resource="dao/UserMapper.xml"/>
    mappers>
configuration>

自己的数据库名记得要更改。

四:编写mybatis工具类(获取slsessionFactory对象以及获取配置文件的资源)

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 Mybatis {
   
private  static SqlSessionFactory   sqlSessionFactory;
   
static {

       
try {//使用mybatis获取SQLSessionFactory对象

//获取配置文件的资源
            String resource = "mybatis.xml";

//通过流和Resources这个类加载资源
            InputStream inputStream = Resources.getResourceAsStream(resource);
           
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        }
catch(IOException e){
            e.printStackTrace();
        }
    }

//既然有了sqlsessionfactory,顾名思义,我们就可以从中获取sqlsession的实例了,sqlsession完全包含了面向数据库执行SQL,命令所需要的所有方法
    public static SqlSession   getsqlsession(){
       
return sqlSessionFactory.openSession();
    }

}

五:编写实体类

package com.zhang.pojo;

public class User {
   
private  int  id;
   
private String name;
   
private String pwd;

   
public User() {
    }

   
public User(int id, String name, String pwd) {
       
this.id = id;
       
this.name = name;
       
this.pwd = pwd;
    }

   
public int getId() {
       
return id;
    }

   
public void setId(int id) {
       
this.id = id;
    }

   
public String getName() {
       
return name;
    }

   
public void setName(String name) {
       
this.name = name;
    }

   
public String getPwd() {
       
return pwd;
    }

   
public void setPwd(String pwd) {
       
this.pwd = pwd;
    }

   
@Override
   
public String toString() {
       
return "User{" +
               
"id=" + id +
               
", name='" + name + '\'' +
               
", pwd='" + pwd + '\'' +
               
'}';
    }
}

六:dao接口类,(这里写这个类是为了操作数据库的)

package com.zhang.dao;

import com.zhang.pojo.User;

import java.util.List;

public interface UserDao {
 
    //获取全部用户
   
List<User> getUserlist();
   
//查询一个用户
   
User getuserid(int id);
   
//插入一个用户
   
int adduser(User user);
   
//修改用户
   
int updateuser(User user);
   
//删除一个用户
   
int deluser(int id);
}

}

七:接口类的Mapper.xml文件(原本应该是接口的实现类,用Mapper配置文件来代替)

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

这里的命名空间namespace=绑定一个对应的dao/Mapper接口
<mapper namespace="com.zhang.dao.UserDao">

//id相当于上面接口里面的方法名,返回类型要写全限定名

//resultType:SQL语句执行后的返回值,parametertype:参数类型,
  <select id="getUserlist" resultType="com.zhang.pojo.User">
      select * from  mybatis.user
    select>

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

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

    <
update id="updateuser" parameterType="com.zhang.pojo.User">
        update mybatis.user  set name=#{name},pwd=#{pwd} where  id=#{id}
    update>

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



mapper>

八:测试

public class UserDaoTest {
   
@Test
   
public void test(){
       
//第一步,获取sqlsession对象
       
SqlSession  sqlSession= MybatilsUtils.getsqlsession();
       
//执行SQL
       
UserDao  userDao=sqlSession.getMapper(UserDao.class);
       
List<User> userlist = userDao.getUserlist();
       
for(User  user :userlist){
           
System.out.println(user);
        }
       
//关闭sql
       
sqlSession.close();
    }
   
@Test
   
public void  getuserid(){
       
SqlSession  sqlSession=MybatilsUtils.getsqlsession();

       
UserDao mapper = sqlSession.getMapper(UserDao.class);

       
User  user=mapper.getuserid(1);
       
System.out.println(user);

       
sqlSession.close();
    }

//插入数据,增删改需要提交时事务
   
@Test
   
public void  adduser(){
       
SqlSession  sqlSession=MybatilsUtils.getsqlsession();

       
UserDao mapper = sqlSession.getMapper(UserDao.class);
   
int res=mapper.adduser(new User(5,"张云","12457"));
   
if(res>0){
       
System.out.println("插入成功");
    }
   
//提交事务
    
sqlSession.commit();


       
sqlSession.close();
    }

   
//修改数据,增删改需要提交时事务
    @Test
   
public void  updateuser(){
       
SqlSession  sqlSession=MybatilsUtils.getsqlsession();

       
UserDao mapper = sqlSession.getMapper(UserDao.class);
       
int res=mapper.updateuser(new User(5,"张呵呵","12457"));

       
//提交事务
       
sqlSession.commit();


       
sqlSession.close();
    }
   
//删除用户
   
@Test
   
public void deluser(){
       
SqlSession sqlSession=MybatilsUtils.getsqlsession();
       
UserDao mapper = sqlSession.getMapper(UserDao.class);
       
mapper.deluser(5);
       
sqlSession.commit();

       
sqlSession.close();
    }

}


注意:增删改需要提交事务!

如果配置文件无法生效,在pom文件中加入这一段话即可。放在依赖后面。是关于资源过滤的。

<build>
    <
resources>
        <
resource>
            <
directory>src/main/resourcesdirectory>
            <
includes>

                <
include>**/*.propertiesinclude>
                <
include>**/*.xmlinclude>
            includes>

        resource>
        <
resource>
            <
directory>src/main/javadirectory>
            <
includes>

                <
include>**/*.propertiesinclude>
                <
include>**/*.xmlinclude>
            includes>

        resource>
    resources>
build>

小结:除了数据库建表之外,一共大概七步。

一:pom文件,导入依赖

二:mybatis-config.xml配置文件,数据库信息

三:工具类:MybatisUtils

四:实体类  user

五:接口UserDao

六:Usermapper.xml

七:测试

可能出现的错误:

标签匹配错误

resource绑定的mapper,需要使用路径,就是“ / ”,

程序配置文件必须符合规范

nullpointerException:没有注册到资源

输出的xml文件中存在中文乱码问题

maven资源没有导出错误,加一段build代码即可,上面有

聊聊mybatis:

一:它是一款优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取及获取结果集。可以使用简单的xml文件或者注解大方式配置和映射原生类型。

二:三种映射的区别:

resource

适用类路径下,直接加载mybatis对应的映射文件,用/进行分割,对于文件名称和文件位置没有强制限制条件,比较灵活,不容易出错

class:

仅适用于类路径下,接口文件与映射文件在同一路径下,且接口名与映射文件名相同,并且映射文件命名为接口全类名的情况,使用.分割,有智能提示,限制条件较多,容易出错

package:

适用于类路径下,接口文件与映射文件在同一路径下,且接口名与映射文件名相同,并且映射文件命名为接口全类名的情况,即简化了class

parameterType指定输入参数类型,mybatis获取参数值拼接在sql中。

resultType指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中

parameterType写在前面  resultType写在后面

三:如果需要连接数据库的配置文件在核心文件中配置即可。

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=root

------

<configuration>
   

   
<properties resource="db.properties">

    properties>

   
<typeAliases>
        <
typeAlias type="com.zhang.pojo.User" alias="User"/>
    typeAliases>
    <
environments default="development">
        <
environment id="development">
            <
transactionManager type="JDBC"/>
            <
dataSource type="POOLED">
                <
property name="driver" value="${driver}"/>
                <
property name="url" value="${url}"/>
                <
property name="username" value="${username}"/>
                <
property name="password" value="${password}"/>
            dataSource>
        environment>
    environments>
    <
mappers>
        <
mapper  resource="com/zhang/dao/UserMapper.xml"/>
    mappers>
configuration>

四:万能Map

假如数据库中的表或者字段过多,我们使用Map

int addUser2(mapmap);

insert into mybatis.user (id,pwd)values(#{id},#{pwd}

测试:

map.put("id",24)

map.put("pwd",3435)

mapper.adduser2(map)

关于模糊查询:

mybatis入门实例(xml文件配置)_第1张图片

 

五:解决属性名和和字段不一致的问题:使用结果集映射

  <resultMap id="UserMap" type="User">

<result  column="id"  property="id"/>
<
result  column="name"  property="name"/>
<
result  column="pwd"  property="password"/>
    resultMap>
    <
select id="getuserid"   resultMap="UserMap">
      select * from  mybatis.user  where id=#{id}
    select>

知识点先到这里,后续的再补充。

你可能感兴趣的:(mybatis,java)