记 - MyBatis数据库框架

2 篇文章 0 订阅
1 篇文章 0 订阅

个人博客:https://damanyang.cn/

创建Maven项目
  • new Maven Project

  • pom.xml

    <dependencies>
    	<dependency>
    		<groupId>org.mybatis</groupId>
    		<artifactId>mybatis</artifactId>
    	    <version>3.5.5</version>
    	</dependency>
    	<dependency>
    		<groupId>mysql</groupId>
    		<artifactId>mysql-connector-java</artifactId>
    		<version>8.0.21</version>
    	</dependency>
    	<dependency>
    		<groupId>org.projectlombok</groupId>
    		<artifactId>lombok</artifactId>
    		<version>1.18.12</version>
    	</dependency>
    </dependencies>
    
  • entity实体类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Acc {
        private long id;
        private String uname;
        private String upwd;
    }
    

    在数据库新建相应表

  • MyBatis 配置文件

    resources -> 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>
    <!--    mybatis运行环境-->
        <!--default设置默认使用环境,对应id-->
        <environments default="dev">
            <environment id="dev">
    <!--            JDBC事务管理-->
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <!--驱动,url,用户名,密码-->
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybts?useUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value=""/>
                </dataSource>
            </environment>
        </environments>
    <!--    注册Mapper-->
        <mappers>
            <mapper resource="cn/daman/mapper/AccMapper.xml"></mapper>
        </mappers>
    </configuration>
    
  • Mapper

    cn.daman.mapper -> AccMapper.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路径,不用后缀-->
    <mapper namespace="cn.daman.mapper.AccMapper">
        <!--实体类路径-->
        <insert id="save" parameterType="cn.daman.entity.Acc">
            <!--sql语句,取值用#{}-->
            insert into acc(uname,upwd) values (#{uname},#{upwd})
        </insert>
    
    </mapper>
    
  • 注册Mapper,见config.xml

  • 主类psvm

     	//读取配置文件
     	InputStream inputStream = 		Test.class.getClassLoader().getResourceAsStream("config.xml");
    	//详见mybatis原理
    	SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    	SqlSessionFactory factory = builder.build(inputStream);
    	SqlSession sqlSession = factory.openSession();
    	//mapper中的save方法
    	String stmt = "cn.daman.mapper.AccMapper.save";
    
    	Acc acc = new Acc(1L,"name","123");
    	//执行insert
    	sqlSession.insert(stmt, acc);
    	sqlSession.commit();
    
  • 这时,程序读不到mapper的东西,只读的到resources,所以要在pom中在配置。

    <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
        </build>
    
  • Run main()

2

上一篇记的是MyBatis原生接口使用方法,实际使用时要调用Mapper.xml非常不方便

另一种方法,MyBatis接口代理

  • cn.daman.repo -> AccRepo(接口)

    public interface AccRepo {
        public int save(Acc acc);
        public int update(Acc acc);
        public int deleteById(long id);
        public List<Acc> findAll();
        public Acc findById(long id);
    }
    
  • 编写接口代理对象,cn.daman.repo -> AccRepo.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="cn.daman.repo.AccRepo">
        <!--id要和方法名一样-->
        <!--parameterType是接收进来的参数类型,resultType是返回值的参数类型,java提供的类可以不写全类名-->
        <insert id="save" parameterType="cn.daman.entity.Acc">
            insert into acc(uname,upwd) values (#{uname},#{upwd})
        </insert>
        <update id="update" parameterType="cn.daman.entity.Acc">
            update acc set uname = #{uname}, upwd = #{upwd} where id = #{id}
        </update>
        <delete id="deleteById" parameterType="long">
            delete from acc where id = #{id}
        </delete>
        <select id="findAll" resultType="cn.daman.entity.Acc">
            select * from acc
        </select>
        <select id="findById" parameterType="long" resultType="cn.daman.entity.Acc">
            select * from acc where id = #{id}
        </select>
    </mapper>
    
  • 注册Mapper

    <mapper resource="cn/daman/repo/AccRepo.xml"></mapper>
    
  • 使用

    public class Test2 {
        public static void main(String[] args) {
            //获取配置文件
            InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
            
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(inputStream);
            SqlSession sqlSession = factory.openSession();
            
            //获取实现接口代理对象
            AccRepo accRepo = sqlSession.getMapper(AccRepo.class);
            //增
            Acc acc = new Acc(3L,"name3","123");
            int res = accRepo.save(acc);
            //!如果操作涉及到数据变动,必须调用commit,如增删改,但查(无数据变动)不需要
            sqlSession.commit();
            //查
            List<Acc> list = accRepo.findAll();
            for (Acc item : list){
                System.out.println(item);
            }
            //关闭sqlsession
            sqlSession.close();
        }
    }
    
  • Run main()

个人博客:https://damanyang.cn/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值