Mybatis
来源:互联网 发布:美国国籍 知乎 编辑:程序博客网 时间:2024/05/22 17:40
Mybatis
mybatis的配置文件写法
<environments default="development><denvironment 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" <property name="usrname" value="root"> <property name="password" value="root"> </dataSource></environment></environments><mappers><mapper resource="/../userMapper.xml"> 注册mapper
建立表对应的实体类
定义操作users表的sql映射文件userMapper.xml
<mapper namespace=sql映射文件的id><select id="getUser" parameterType="int" resultType=类> select * from users where id=#{id}</select>
建立一个测试类
String resouce = "conf.xml";Reader reader = Resources.getResourceAsReader(resource);SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//默认是手动的,传入true为自动提交SqlSession session = sessionFactroy.openSession();Streing statement = "com.....userMapper"(映射文件的ID)+".selectUser";User user = session.selectOne(statement,1);session.commit();或Test.class.getClassLoader().getResourceAsStream(resource);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = factory.openSession();String statement = "映射文件" + "标签";session.selectone(statemet, 2);
增删改查xml实现
userMapper.xml中:<insert id="addUser" parameterType="对象的类"> insert into users(name, age) values(#{name}, #{age});//写的都是对象的某个属性</insert><delete id="deleteUser" parameterType="int"> delete from users where id=#{id}</delete><upadate id="updateUser" parameterType="类"> update user set name=#{name},age=#{age} where id=#{id}</upadate>
基于注解的实现
创建一个接口,实现增删改查,例如:@Insert("insert into users(name,age) values(#{name},#{age})")public int add(User user);不用写实现类,自动创建,使用:UserMapper mapper = session.getMapper(UserMapper.class);int add = mapper.add(new User(-1,"SS",45));conf.xml中也要加上mapper:<mapper class="com.atguigu.day03_mybatis.test2.UserMapper"/>
以上优化的地方
连接数据库的配置放在单独一个properties文件中,然后引用:<properties resource="db.properties"/>引用:<property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/>配置实体类的别名:<typeAliases><typeAlias type="com...User" alias="_User"/> 或者直接用package,将能识别简单类名 <package name="包"/></typeAliases>
解决字段名与实体类属性名不相同的冲突
使用别名:SELECT order_id id,order_no orderNo, order_price price FROM orders WHERE ....另一种解决方式,定义resultMap<select id="" parameterType resultMap="">SELECT * FROM orders WHERE order_id=#{id}</select>//resultMap封装映射关系,id针对主键,result针对其他一般字段<resultMap type="Order" id="getOrder2Map"><id property="id" column="order_id"/><result property="" column=""/><result property="" column=""/></restultMap>
实现关联表查询
方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集,封装联表查询的数据(去除重复的数据):<select id="" parameteType="" resultMap="">select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id}</select><resultMap type="" id=""><id property="" column=""/><result property="" column=""/><association property="" column="" javaType=""> <id property="" column=""/> <result property="" column=""/></association></resultMap>方式二: 嵌套查询:通过执行另一个SQL映射语句来返回预期的复杂类型SELECT * FROM class WHERE c_id=1;SELECT * FROM class WHERE t_id=1;<select id="" parameteType="" resultMap="">select * from class where c_id=#{id}</select><resultMap type="" id=""><id property column/><result property column/>...
一对多的关联查询(一个班级对多个学生)(简记)
select id resultMap select * from class where c_id=#{id}select id resultMap select t_id id, t_name name form Teacher where t_id=#{id}select id resultType select s_id id, s_name name from student where class_id={id}resultMap type id id property column result property column association property column select collection property column selector:select * from class c, student s where c.teacher_id=t.t_id c.c_id=s.class_id and c_id=1;select id parameterType resultMap> sqlresultMap type="Classes" id="getClassMap"> <id property column <result propety column <association property="teacher" javaType="Teacher" <collection property ofType="Student" <id column <result property="name" column="s_name"
动态SQL与模糊查询
多条件查询:查询条件封装成类: ConditionUser: string name;int minAge;int maxAge;//支持jstl判断select id=getUser parameterType=ConditionUser resultType=User select * from d_user where if test=name!="%null%" name like #{name} and age between #{minAge} and #{maxAge}
调用存储过程
通过parameterMap传参select id=getUserCount paramtertMap=getUserCount statementType=CALLABLE CALL mybatis.ges_user_count(?,?)parameterMap type=java.util.Map id=getUserCountMap parameter property=sexid mode=IN jdbcType=INTEGER parameter property=usercount mode=OUT jdbcType=INTEGER
阅读全文
0 0
- MyBatis
- MyBatis
- Mybatis
- myBatis
- mybatis
- MyBatis
- mybatis
- Mybatis
- MyBatis
- Mybatis
- mybatis
- MyBatis
- MyBatis
- mybatis
- MyBatis
- mybatis
- mybatis
- mybatis
- JS——面向对象实例
- 马跳日
- 1134. Vertex Cover (25)
- "页面跳转"实例详解"SpringMVC注解"的作用与用法
- iOS 处理二叉树数据 实现多级表格
- Mybatis
- 动态规划——最优二叉查找树
- MYSQL(五)
- shell脚本中 数组的基本用法
- 面向对象-1
- Leetcode题解-5. Longest Palindromic Substring
- HDU 6208 The Dominator of Strings(字符串)
- Python网络入门
- ArrayList源码解析