Mybtais入门---IDEA创建MyBatis项目,实现简单的增删改查

前期准备 新建一个数据库表

CREATE TABLE person(
 id int(11) NOT NULL auto_increment,
 name VARCHAR(50) NOT NULL,
 age int(6) NOT NULL,
 PRIMARY KEY(id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO person VALUES(1,"张三",20);
INSERT INTO person VALUES(2,"李四",22);
INSERT INTO person VALUES(3,"王五",26);

新建一个maven项目,整个项目的目录结构如下:
在这里插入图片描述
    待我一一给你分析,没有的文件夹可以自行创建。

第一步:在pom中添加如下依赖

 <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>

        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

 <!-- 配置以下信息,可以避免mapper.xml加载不成功-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

第二步:创建实体类

在package[bean]下新建实体类Person,用于映射表person

@Data
public class Person {
    private Integer id;
    private String name;
    private Integer age;

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

第三步:编写Mapper接口与Mapper映射文件

在com.diligentkong.mybatis.dao下编写PersonMapper接口,代码如下:

public interface PersonMapper {
    public Person getPersonById(Integer id);
}

在resource下的mapper文件夹下新建PersonMapper.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.diligentkong.mybatis.dao.PersonMapper">
<!--    namespace:命名空间,指定为接口的全类名
    id:唯一标识
    resultType:返回值类型
    #{id}:从传递过来的参数中取出id值-->

    <select id="getPersonById" resultType="com.diligentkong.mybatis.bean.Person">
        select id,name,age from person where id = #{id}
    </select>
</mapper>

Mapper接口开发需要遵循以下规范:
1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

第四步:编写配置文件 mybatis-config

其主要作用是连接数据库,配置xml映射文件 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>
    <!--
       1.mybatis可以使用properties引入外部properties配置文件的内容,
       resource:引入类路径下的资源
       url:  引入网络路径或者磁盘路径下的资源
    -->
    <properties resource="config/dbconfig.properties"></properties>


    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <!--将我们写好的sql映射文件一定要注册到全局配置文件-->
    <mappers>
        <mapper resource="mapper/PersonMapper.xml"></mapper>
    </mappers>
</configuration>

其中dbconfig.properties 的内容如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=1234

编写测试方法

MybatisTest内容:

/**
 * 1.接口式编程
 * 原生                   Dao     ====>   DaoImpl
 * mybatis                Mapper   ====>   XXMapper.xml
 *
 * 2.SqlSession代表和数据库的一次会话,用完必须关闭
 * 3.SqlSession和connection一样都是非线程安全,每次使用都应该获取新的对象
 * 4.mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象,将接口和xml进行绑定
 *  PersonMapper mapper = openSession.getMapper(PersonMapper.class);
 *  5. 两个重要的配置文件
 *    mybatis的全局配置文件: 包含数据库连接池信息,事务管理器信息等,  系统运行环境信息
 *    sql映射文件: 保存了每一个sql语句的映射信息,将sql抽取出来
 */
public SqlSessionFactory getSqlSeeionFactory() throws IOException {
    String resource = "config/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    return new SqlSessionFactoryBuilder().build(inputStream);

}

@Test
public void myTest() throws IOException {
    // 1.获取sqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = getSqlSeeionFactory();
    // 2、获取sqlSession对象
    SqlSession openSession = sqlSessionFactory.openSession();

    try {
        // 3、获取接口的实现类对象
        //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
        PersonMapper mapper = openSession.getMapper(PersonMapper.class);
        Person person = mapper.getPersonById(1);
        System.out.println(mapper.getClass());
        System.out.println(person);
    } finally {
        openSession.close();
    }

}

运行结果:
在这里插入图片描述

就这样,一个简单的mybatis项目就这样成功。
接着我们再继续做添加、修改、删除的操作.

在PersonMapper编写如下代码:

public Person getPersonByNameAndAge(@Param("name") String name,@Param("age") Integer age);

public int addPerson(Person person);

public boolean updatePerson(Person person);

public void deletePerById(Integer id);

在PersonMapper.xml中编写如下代码:

<!--  public Person getPersonByNameAndAge(@Param("name") String name,@Param("age") Integer age);-->
   <select id="getPersonByNameAndAge" resultType="com.diligentkong.mybatis.bean.Person">
       select * from person where name = #{name} and age = #{age}
   </select>

  <!-- public int addPerson(Person person);-->
   <insert id="addPerson" parameterType="com.diligentkong.mybatis.bean.Person" useGeneratedKeys="true" keyProperty="id">
       insert into person(name,age)values (#{name},#{age})
   </insert>

<!--   public boolean updatePerson(Person person);-->
   <update id="updatePerson">
       update person set name = #{name}, age = #{age} where id = #{id}
   </update>
  <!-- public void deletePerById(Integer id);-->
   <delete id="deletePerById">
       delete from person where id = #{id}
   </delete>

测试方法

@Test
    public void myTestcrud() throws IOException {
        // 1.获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = getSqlSeeionFactory();
        // 2、获取sqlSession对象
        SqlSession openSession = sqlSessionFactory.openSession();

        try {
            // 3、获取接口的实现类对象
            //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
            PersonMapper mapper = openSession.getMapper(PersonMapper.class);

            //Person person = mapper.getPersonById(1);
            // 通过name和age 查找
            //Person person = mapper.getPersonByNameAndAge("李四",22);

            // 添加person
           /* Person person = new Person(null,"kong",18);
            mapper.addPerson(person);
*/

           // 测试修改
            /*Person person = new Person(1,"kk",16);
            boolean updatePerson = mapper.updatePerson(person);
            System.out.println(updatePerson);*/
            // 测试删除
            mapper.deletePerById(2);

            //System.out.println(person);

            //System.out.println(mapper.getClass());
          //  System.out.println(person);

            //手动提交数据 ,如果不加这个,在addPerson和updatePerson的时候会不成功
            openSession.commit();
        } finally {
            openSession.close();
        }
    }

需要注意的是:

	 1、mybatis允许增删改直接定义以下类型返回值
	  		Integer、Long、Boolean、void
	 2、我们需要手动提交数据
	 		sqlSessionFactory.openSession();===》手动提交 
	 		sqlSessionFactory.openSession(true);===》自动提交

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值