mybatis 基础(一) xml配置
程序员文章站
2022-03-25 22:51:50
如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬! mybatis: 1.轻量级 2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系) 3.mybatis中 dao层为接口.不需要写实 ......
如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬!
mybatis:
1.轻量级
2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系)
3.mybatis中 dao层为接口.不需要写实现类,实现的方式交付给xml或注解
4.mybatis所需依赖的jar
<dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.5.0</version> </dependency> <!-- mysql 连接数据库 java --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.15</version> </dependency>
- 注意:映射xml文件的路径需要与接口对应上
第一章 记录xml方式
需要两个xml文件
主配置文件:mybatis-config.xml
映射文件:user.xml
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">
mybatis-config.xml
<configuration> <!--配置环境--> <environments default="mysql"> <!--配置mysql的环境--> <environment id="mysql"> <!--配置事务--> <transactionmanager type="jdbc"></transactionmanager> <!--配置连接池--> <datasource type="pooled"> <property name="driver" value="com.mysql.jdbc.driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/database"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </datasource> </environment> </environments> <mappers> <mapper resource="com/mybatis/dao/user.xml"></mapper> </mappers> </configuration>
user.xml
<!--映射路径--> <mapper namespace="com.mybatis.dao.iusedao"> <!-- 注意点:#{}里面的字段对应的是实体类中getter后面的字段开头字母小写.如getusername 对应的就是username resulttype:返回值类型 parametertype:参数类型 id:对应接口中的方法(对应映射路径中的方法) --> <!-- resultmap 主要作用是让实体类与数据库表中字段名映射上 如果实体类与数据库中字段名在不区分大小写的情况下相同的话,那就不需要配置resultmap,因为mysql数据库不区分大小写,所以可以 直接映射上 但是如果实体类与数据库中字段名不相同的话,我们可以由三个解决方案 1. 直接修改数据库字段名,使之与实体类对应上 2. 在程序中配置文件中对sql语句改造,起别名,使之与实体类映射上 (直接操作sql语句效率更高) 如: select gender as usergender,age as userage from user; 3. 写配置文件 resultmap,使之映射上,但是需要修改resulttype="com.mybatis.entry.user" 为 resultmap="usermap" (方便) --> <resultmap id="usermap" type="com.mybatis.entry.user"> <!--首先配置主键对应--> <id column="uid" property="useruid"></id> <!--其他属性配置--> <result column="username" property="username"></result> <result column="gender" property="usergender"></result> <result column="age" property="userage"></result> </resultmap> <!--获得所有用户列表--> <!--<select id="getusers" resultmap="usermap">--> <select id="getusers" resulttype="com.mybatis.entry.user"> select * from user </select> <!--添加一条信息--> <insert id="saveuser" parametertype="com.mybatis.entry.user"> <!--配置插入操作后,获取插入数据的id keyproperty: 指定返回的id映射到bean中的哪个属性 keycolumn: 插入数据以后,要返回的内容在数据表中对应的字段名称 order after :表示这个selectkey语句的执行是在insert语句之后 --> <selectkey keyproperty="uid" keycolumn="uid" order="after" resulttype="int"> select last_insert_id(); </selectkey> insert into user(username,gender,age) values (#{username},#{gender},#{age}) </insert> <!--删除一条信息--> <delete id="deleteuser" parametertype="java.lang.integer"> delete from user where uid=#{uid} </delete> <!--更新一条信息--> <update id="updateuser" parametertype="com.mybatis.entry.user"> update user set username=#{username},gender=#{gender},age=#{age} where uid=#{uid} </update> <!-- 模糊查询:模糊查询的时候可以使用一个字段作为占位符,然后再测试类或者被调用的时候加上百分号 --> <!--<select id="getusers" resultmap="usermap">--> <select id="findbyname" parametertype="java.lang.string" resulttype="com.mybatis.entry.user"> select * from user where username like #{name} </select> <!--查询总条数--> <select id="findtotal" resulttype="int"> select count(1) from user </select> <!--根据多个对象查询,需要将实体类以及其他属性再封装一层成为新的实体类--> <!--<select id="getusers" resultmap="usermap">--> <select id="findbyvo" resulttype="com.mybatis.entry.user" parametertype="com.mybatis.entry.vo"> select * from user where username=#{user.username} and gender=#{user.gender} </select> </mapper>
接口
public interface iusedao { /** * 查询所有用户 * @return */ public list<user> getusers(); /** * 添加用户 * @return */ public boolean saveuser(user user); /** * 删除用户 * @return */ public void deleteuser(int uid); /** *修改用户 */ public void updateuser(user user); /** * 模糊查询 * @param username * @return */ public list<user> findbyname(string username); /** * 查询总记录条数 * @return */ public int findtotal(); /** * 根据新封装的实体类去查询(多条件查询) * @param vo 将多个条件封装成一个实体类 * @return */ public list<user> findbyvo(vo vo); }
测试类
public class mybatistest { private inputstream inputstream=null; private sqlsession sqlsession=null; private iusedao userdao=null; private sqlsessionfactory sessionfactory=null; @before public void init() throws exception { inputstream=resources.getresourceasstream("mybatis-config.xml"); sessionfactory=new sqlsessionfactorybuilder().build(inputstream); sqlsession=sessionfactory.opensession(); userdao=sqlsession.getmapper(iusedao.class); } @after public void destroy() throws exception { sqlsession.commit(); sqlsession.close(); inputstream.close(); } @test public void testfindall() throws exception { list<user> list=userdao.getusers(); for (user user:list) { system.out.println(user); } } @test public void testsaveuser() throws exception{ user user=new user(); user.setusername("xxx"); user.setage(20); user.setgender("男"); /*获取保存前的id*/ system.out.println(user.getuid()); userdao.saveuser(user); /*获取保存后的id*/ system.out.println(user.getuid()); } @test public void testdeleteuser() throws exception { int uid=3; userdao.deleteuser(uid); } @test public void testupdateuser() throws exception{ user user=new user(); user.setuid(5); user.setusername("test"); user.setage(20); user.setgender("男"); userdao.updateuser(user); } @test public void testfindbyname() throws exception{ list<user> users = userdao.findbyname("%x%"); for (user user:users) { system.out.println(user); } } @test public void testfindtotal() throws exception{ int total = userdao.findtotal(); system.out.println(total); } @test public void testfindbyvo() throws exception{ vo vo=new vo(); user user=new user(); user.setusername("xxx"); user.setgender("男"); vo.setuser(user); list<user> vos = userdao.findbyvo(vo); for (user user1:vos) { system.out.println(user1); } } }
上一篇: MVC 模型验证
下一篇: 【OJ】字符串去重并提取出重复字符
推荐阅读