一
创建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&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()