mybatis随便写写

什么是mybatis

mybatis原本是apache的一个开源项目,后来被谷歌收购了,是一个基于java的持久层框架

ORM(Object-Relationship-Mapping) 对象关系映射,编程思想的一种,将数据库中的字段用对象的形式表现出来

JPA(Java-Persistence-API):是java持久化接口的意思,基于ORM思想的一套接口,不是具体实现

API(Application Programming Interface):应用程序编程接口,类似工具类,是已经定义好的类,由应用层程序员使用。

Mybatis配置

 

    配置文件:用来连接数据库 以及引用映射文件

<configuration>

  <environments default="mysql">

    <environment id="mysql">

      <transactionManager type="JDBC"/>

      <dataSource type="POOLED">

        <property name="driver" value="com.mysql.jdbc.Driver"/>

        <property name="url" value="jdbc:mysql://localhost:3306/jdbc"/>

        <property name="username" value="root"/>

        <property name="password" value="123456"/>

      </dataSource>

    </environment>

  </environments>

  <mappers>

    <mapper resource="com/oracle/mapper/UserMapper.xml"/>

  </mappers>

</configuration>

 

映射文件:用来映射数据库的实体类 这里的映射文件直接代替了dao

    <mapper namespace="com.oracle.mapper.UserMapper">

 <select id="findUserById" resultType="com.oracle.beans.User" parameterType="Integer">

    select * from user where id =#{id}

  </select> 

</mapper>

 namespace是工作空间  session使用的时候要写namespace+id  (是绝对命名)

  但是没有重名ID的情况下,可以直接使用Id(端命名)

持久化层执行操作:

      用配置文件创建sqlSessionFactory工厂

     String resource=mybatisConfig.xml;

InputStream ins = Resources.getResourceAsStream(resource);

SqlSessionFactory sessionFactory = New SqlSessionFactoryBuilder().build(ins);

SqlSession session = sessionFactory.openSession();

session执行操作

User user = Session.selectOne(findUserById,2);

     Syso(user);

 

但是这样写有缺陷,就是在执行selectOne()方法时,编译器不确定你要传值的类型

于是就用到了通过接口代理

写一个接口,然后把工作空间改成这个接口

public interface UserMapper {

public User findById(int id);

}

  <mapper namespace="com.oracle.mapper.UserMapper">

 <select id="findUserById" resultType="com.oracle.beans.User" parameterType="Integer">

    select * from user where id =#{id}

  </select> 

</mapper>

 

然后用session获取这个映射,获取映射需要反射这个接口代理

UserMapper mapper =  Session.getMapper(UserMapper.class);

User user = Mapper.findById(1);

这就避免了传异常类型的

 

还有更简单的方法,那就是使用注释

       @Select(select * from user);

       Public List<User> allUser();

  在代理接口方法上写注释,直接写sql语句

  

映射里面什么都不用写,加上命名空间就可以

 

配置文件中的标签:

setting标签:可以设置很多东西

   比如说数据为空的时候显示的什么

 <settings>

<setting name="jdbcTypeForNull" value="NULL"/>

还有很多

</settings>

        详情看文档

一个配置完整的 settings 元素的示例如下:

<settings>

  <setting name="cacheEnabled" value="true"/>

  <setting name="lazyLoadingEnabled" value="true"/>

  <setting name="multipleResultSetsEnabled" value="true"/>

  <setting name="useColumnLabel" value="true"/>

  <setting name="useGeneratedKeys" value="false"/>

  <setting name="autoMappingBehavior" value="PARTIAL"/>

  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

  <setting name="defaultExecutorType" value="SIMPLE"/>

  <setting name="defaultStatementTimeout" value="25"/>

  <setting name="defaultFetchSize" value="100"/>

  <setting name="safeRowBoundsEnabled" value="false"/>

  <setting name="mapUnderscoreToCamelCase" value="false"/>

  <setting name="localCacheScope" value="SESSION"/>

  <setting name="jdbcTypeForNull" value="OTHER"/>

  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/></settings>

 

        

   还有typeAliases  ,这个很重要,比较常用,起别名用的

    <typeAliases>

<typeAlias type="com.oracle.beans.User" alias="user"/>  写完这个映射文件里面就不用写user的全类名了,别名就可以了

<package name="com.oracle.beans"/>  这是注解起别名,扫描范围

注解起别名默认不写就是类名首字母小写,写了就是@Aliases(别名)

</typeAliases>

 映射文件也可以不用挨个写,加个扫描就行了

<package name="com.oracle.mappers"/>

 

Update

添加

Public int addUser(User user);

映射文件: 添加用insert标签

<insert id="addUser" parameterType="com.oracle.beans.User" >

insert into user (name,password) values (#{name},#{password})

</insert>

删除和修改

public boolean updateUser(User user);

映射文件:删除用delete标签
<delete id="deleteById" parameterType="Integer">

delete from user where id = #{id}

</delete>

 

修改也是一样的道理:update操作的返回值类型不用在标签中定义,使用默认的三种。

 Booleanintlong

 

主键自动添加:

主键正常就已经能自动添加了,但是还是要在values前面写没有id属性的那几个字段,如果字段多的话就会很麻烦。

   所以我们使用主键自增

public boolean addUserGeneral(User user);

<insert id="addUserGeneral" parameterType="com.oracle.beans.User"  useGeneratedKeys="true" keyProperty="id">

    原来的;  insert into user (name,password) values (#{name},#{password})

设置之后:insert into user values (#{id},#{name},#{password})

</insert>

设置useGeneratedKeys=true   KeyProperty设置主键

 

多参数:

写多参数需要在参数前面加上@Param(参数名)

public List<User> findByNameAndTable(@Param("table")String table,@Param("name")String name);

配置文件不需要写参数,其他正常写。

<select id="findByNameAndTable" resultType="user">

select * from ${table} where name= #{name}

</select>

 

  键值对参数:

public List<User> findByMap(Map<String,Object> user);

<select id="findMapResult" resultType="map">  map有框架自带的别名,不用自己写

select id,name,password from user where id= #{id}

</select>

 

  返回值是map类型的:

public Map<String,Object> findMapResult(int id);

<select id="findMapResult" resultType="map">

select id,name,password from user where id= #{id}

</select>

 

查询出来的结果:{ name=寡姐1, password=12345}

       但是呢,你不知道查出来的这个是哪条,因为不显示

      要在接口方法上加@MapKey("id")

输出结果:{9={id=9, name=寡姐1, password=12345}}

${} 用来写类名之类的,就是那种正常写了会报错的,用处类似与拼接字符串

还有

  比较符转义

 select * from user where id < #{id} and name=#{name}

 在配置文件中写这句话运行会报错,因为< 和标签的左括号冲突了,要转义才行。

select * from user where id > #{id} and name=#{name}

转义符:

  <           <      小于号                                           


                     >          >    大于号

                     &       &      和

                     '     '   单引号

                     "     "     双引号

 

Mybatis 表关联查询

 

表关联查询通过设置结果集:

 

这是一个普通的bean

 <select id="findStudentById" resultType="student">

select * from student where id=#{id}

</select>

 

改成一对一关联查询:

在结果集里面配置返回的类型:

 <resultMap type="student" id="studentAddClass">

<id column="id" property="id"/>

<result column="name" property="name"/>

<result column="password" property="password"/>

配置一对一的对象

<association property="clazz" 

select="com.oracle.mappers.ClassMapper.findClassById"  获取对象执行的方法 

column="cid">参数

<id column="cid" property="cid"></id>

<result column="teacher" property="teacher"/>

<result column="score" property="score"/>

</association>  

</resultMap>

 

一对多关联查询:

<resultMap type="clazz" id="clazzAndStudent">

<id column="cid" property="cid"/>

<result column="teacher" property="teacher"/>

<result column="score" property="score"/>

一对多里面的集合属性用conllection,类型用ofType

<collection property="stu" ofType="student" column="cid"  select="com.oracle.mappers.StudentMapper.findStudentsByClass">

<id column="id" property="id"/>

<result column="name" property="name"/>

<result column="password" property="password"/>

</collection>

</resultMap>

<select id="findClassById" resultMap="clazzAndStudent">

select * from class where cid=#{cid}

</select>


随便写写

09-02

横版格斗游戏策划目录(PVE系统)rn概述rn 描述在PVE模式下,Player细节,怪物细节,迷宫细节,道具细节,装备细节。rn 主要设计概念 rn A.角色方面rn 1.角色的特技绝招,和连击绝招的设计。rn (角色特技分上中下三等,每一等中又分高中低三级。rn 共9个级别的特技绝招)rn 2.角色的性别与职业的分类。rn 3.角色受到伤害时,可用的动作设定。如:受身,一闪,rn 无敌等动作.rn 4.合技,当两位以上玩家,同时放特技时,可以产生一种新的特技,rn 攻击加倍。rn 5.角色各数值和属性的设置,包括个体数值和归属属性。rn (如他个体上有,力量,魔法,速度等数值。rn 而归属属性可以是金木水火土的一类)rn B.怪物方面rn 1.怪物可根据角色的类型分类,分为几种属性,rn 当角色攻击同类型或同属性的怪物时,rn 得到的经验值要比一般怪物多20%-30%rn C.地图方面rn 1.地图有人工设定的和随机生成的,即指定型地图和随机型地图。rn (随机地图由机器自动生成的,生成原理是由活动地图块上的rn 节点自动连接生成)。rn (PS.下方解释什么是活动地图块。)rn D.道具方面rn 1.不同地图块,不同怪物或BOSS掉落的宝物,其类型,rn 等级和掉落几率的设计。rn (大致上掉落与怪物等级或属性相匹配的道具,但如果是rn 被同属性杀掉,或是用特殊高等低几率特技,将有一定几rn 率掉落高等级道具)rn 2.道具分属性和不同装配对象,一些道具可以混装,rn 一些道具不可混装。rn E.装备方面 rn 1.装备了不同类型的装备后,可以使用该类型的连技或必杀。rn (这样高等或华丽的连技,就只能靠装备习的,rn 而不是高等级就可以学会这样只要控制好装备在游戏里的流动量,rn 就可以增大元宝的购买量。)rnrn//-----------------------------------------------------------------rnrn一.Playerrn 1.描述rn a).玩家所控制的角色描写。rn b).rn c).角色的特技绝招描写。rn d).角色所能使用的动作描写。(如跑,滚,挡等)rn 2.类别rn 角色的分类。(可类似有战士,魔法师,枪炮手,牧师等)rn 3.各项属性rn a)表格格式rn |属性名称 |属性类型 |字节长度 |备注 |等等 |rn |角色名称 |字符 |10 |无 | |rn |角色性别 |字符 |4 |无 | |rn |职业名称 |字符 |10 |无 | |rn |技能名称 |字符 |10 |无 | |rn |角色属性 |字符 |10 |无 | |rn |角色HP |数值 |16 |无 | |rn |角色MP |数值 |16 |无 | |rn |... |... |... |... | |rn |.. |.. |.. |.. | |rn |. |. |. |. | |rn rn 例:rn b)表格实例rn |角色 |性别 |职业 |技能 |属性 |角色HP |角色MP |rn |艾米塔 |女 |剑手 |飞火剑|火 |100 |50 |rn |... |... |... |... |... |... |... |rnrnrn二.怪物rn 1.描述rn 场景中出现的各类怪物。rn 2.种类rn 怪物等级与分类,rn 3.各项属性rn |属性名称 |属性类型 |字节长度 |备注 |等等 |rn |怪物名称 |字符 |10 |无 | |rn |怪物等级 |字符 |10 |无 | |rn |怪物类型 |字符 |10 |无 | |rn |怪物属性 |字符 |10 |无 | |rn |怪物HP |数值 |16 |无 | |rn |怪物MP |数值 |16 |无 | |rn |攻击方式 |字符 |10 |无 | |rn |攻击伤害值 |数值 |16 |无 | |rn |... |... |... |... | |rn |.. |.. |.. |.. | |rn |. |. |. |. | |rnrn rn 例:rn |怪物 |等级 |类型 |属性 |HP |MP |... |rn |哥巴达 |1级 |地精灵 |土 |100 |100 |... |rn |... |... |... |... |... |... |... |rn rnrn三.道具rn 1.描述rn 1).角色可用道具。(如飞刀,大还丹等)rn 2).场景道具。(如木桶,箱子等)rn 2.种类rn 道具的分类(如使用类,回复类等)rn 3.各项属性rn |属性名称 |属性类型 |字节长度 |备注 |等等 |rn |道具名称 |字符 |10 |无 | |rn |道具类型 |字符 |10 |无 | |rn |道具效果 |字符 |20 |无 | |rn |效果数值 |数值 |16 |无 | |rn |道具价格 |数值 |16 |无 | |rn |... |... |... |... |... |rn |.. |.. |.. |.. |.. |rn |. |. |. |. |. |rn rnrn 例:rn |道具名称 |道具类型 |道具效果 |效果数值 |道具价格 |rn |飞刀 |武器类 |+攻击伤害|+100 |500 |rn |大还丹 |药物类 |回复HP |+100 |100 |rn |... |... |... |... |... | rnrn四.装备rn 1.描述rn 1).角色可用主装备。(如盔甲,头盔,护身等)rn 2).角色可用副装备。(如宝石,项链,技能等)rn (高等技能是以不同的装备习得的)rn 2.种类rn 装备的种类(增加属性类,技能习的类等)rn 3.各项属性rn |属性名称 |属性类型 |字节长度 |备注 |等等 |rn |装备名称 |字符 |10 |无 | |rn |装配类型 |字符 |10 |无 | |rn |装配位置 |字符 |10 |无 | |rn |对应属性 |字符 |10 |无 | |rn |装备效果 |字符 |10 |无 | |rn |增加数值 |数值 |16 |无 | |rn |装备价格 |数值 |16 |无 | |rn |对应技能 |字符 |10 |无 | |rn |... |... |... |... |... |rn |.. |.. |.. |.. |.. |rn |. |. |. |. |. |rnrnrn 例:rn |装备名称 |装备类型 |装备位置 |对应属性 |等... |rn |头巾 |主装备 |头部 |土 | |rn |红宝石 |副装备 |身体 |无 | |rn |... |... |... |... |... |rn rn四.地图rn 1.描述rn 游戏中的地图或场景,分为活动地图和指定地图。rn a)指定地图为游戏中已设定好的地图,用来连接不同的城镇,rn 且离主城和出生城越远上面的怪物等级越高。rn b)活动地图为游戏中,电脑会按事先设定好的rn 规则排列活动地图块。来达到,每次玩家进入地图,rn 都有不同的迷宫组合。适用与,地洞,城堡,墓地,rn 等游戏的副本。用来增加游戏性。rn /*2.类型rn 活动地图块*/rn 3.各项属性

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭